2017-07-04 69 views
-3

如果我的问题的标题太含糊,我很抱歉,但我不知道如何轻松地描述我想要弄清楚的内容。基本上我有一个类有std :: vector类型的属性,它应该包含指向它自己的指针。我试着编译和运行所提供的代码,而且我没有错误,所以现在我想知道这两个代码之间有什么区别? 代码1:这两个类声明有什么区别?

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

代码2:

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

我希望得到任何帮助。 谢谢

+3

首先是点的矢量发给MyClass。其次是'MyClass'实例向量的指针。 – iehrlich

+2

'std :: vector 容器;'这是一个向量,它包含一个指向'MyClass'元素的指针列表......'std :: vector * Container;'这是一个指向包含'MyClass'的向量的指针元素。 – ZeldaZach

+0

@mike bayko向量中有多少个指针可以指向一个对象?也许你是指std :: vector类型的静态数据成员? –

回答

0

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

情况1:

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

在这种情况下,所述的sizeof(容器)会的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; 
+0

谢谢你澄清这一点。 –

+0

sizeof stuff是全错, – juanchopanza

+0

@juanchopanza解释。只是说这是错的不是很有帮助。 –