【问题标题】:What is the difference between both of these class statements?这两个类语句有什么区别?
【发布时间】:2017-07-04 21:49:11
【问题描述】:

如果我的问题的标题过于模糊,我很抱歉,但我不知道如何轻松描述我想要弄清楚的内容。本质上,我有一个具有 std::vector 类型属性的类,它应该包含指向自身的指针。我尝试构建和运行两个提供的代码,但没有出现任何错误,所以现在我想知道这两个代码之间有什么区别? 代码1:

class MyClass {
public:
    std::vector<MyClass *> Container;
};

代码 2:

class MyClass {
public:
    std::vector<MyClass> * Container;
};

如果有任何帮助,我将不胜感激。 谢谢

【问题讨论】:

  • First 是指向MyClass 的指针向量。第二个是指向MyClass 实例向量的指针。
  • std::vector&lt;MyClass *&gt; Container; 这是一个包含指向MyClass 元素的指针列表的向量... std::vector&lt;MyClass&gt; * Container; 这是一个指向包含MyClass 元素的向量的指针。
  • @mike bayko 一个对象在向量中可以有多少个指向自身的指针?也许您的意思是 std::vector 类型的静态数据成员?
  • 如果你参加了a little bit further 的测试,你可以看到哪个课程失败了。

标签: c++ class vector properties


【解决方案1】:

在第一种情况下,您定义了一个 MyClass 指针数组。

案例一:

class MyClass {
public:
    std::vector<MyClass *> Container;
};

在这种情况下,sizeof(Container) 将是 sizeof(MyClass*)(指针大小)X 向量长度。与向量本身相同。 你会像这样访问变量...

// ChildContainer is a vector
ChildContainer = myInstance->Container[i]->Container;

在第二种情况下,您正在定义一个指向类实例数组的指针(它们本身也是指针,无论如何)。在这里,sizeof(Container) 将是指针的大小。向量本身将是 sizeof(MyClass) (实例指针!)向量的 X 长度。

案例 2:

class MyClass {
public:
    std::vector<MyClass> * Container;
};

你可以像这样访问变量...

// ChildContainer is a pointer to a vector
ChildContainer = myInstance->(*Container)[i]->Container;

如果 MyClass 实际上是一个结构体,访问可能会有些不同,因为结构体默认不是指针。

案例一:

struct MyClass {
public:
    std::vector<MyClass*> Container;
};

用途:

// ChildContainer is a vector
ChildContainer = myInstance.Container[i]->Container;

案例 2:

struct MyClass {
public:
    std::vector<MyClass> * Container;
};

用途:

// ChildContainer is a pointer to a vector
ChildContainer = myInstance.(*Container)[i].Container;

【讨论】:

  • 感谢您澄清这一点。
  • @juanchopanza 解释。仅仅说它是错误的并没有多大帮助。
  • 我不知道你在说什么,我也不想去尝试猜测,也不想再浪费时间在语义上。 sizeof 东西纯粹是为了说明声明中的差异。如果你愿意,你可以修复它。
猜你喜欢
  • 2016-04-16
  • 2022-01-02
  • 1970-01-01
  • 2023-03-15
  • 2015-05-31
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多