这两个类语句之间有什么区别?

时间:2017-07-04 21:49:12

标签: c++ class vector properties

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

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

代码2:

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

我将不胜感激任何帮助。 感谢

1 个答案:

答案 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;