如果我的问题标题太模糊,我很抱歉,但我不知道如何轻易地描述我想弄清楚的内容。本质上我有一个类具有类型为std :: vector的属性,它应该包含指向自身的指针。我尝试构建和运行两个提供的代码,我没有错误,所以现在我想知道这两个代码之间有什么区别? 代码1:
class MyClass {
public:
std::vector<MyClass *> Container;
};
代码2:
class MyClass {
public:
std::vector<MyClass> * Container;
};
我将不胜感激任何帮助。 感谢
答案 0 :(得分:0)
在第一种情况下,您正在定义一个MyClass指针数组。
案例1:
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实际上是一个结构,那么访问可能会有所不同,因为默认情况下结构不是指针。
案例1:
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;