2012-06-12 21 views
9

我一直认为struct是一个固定大小的对象,虽然似乎没有任何明显的编译器错误,但我想知道是否这样做通常是很好的做法。将结构更改为类更合理,或者将结构做得更好?是否有可能/建议将矢量存储在结构中? C++

的代码,只是因为人们得到挑剔:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

我在做什么是有一个班级的孩子一样类型父的本质。当父母去世时,孩子们也是这样。

+7

'struct'只是一个默认可见性为public而不是'private'的类。 –

+2

请注意,使用构造函数/析构函数将成员添加到结构中时,编译器也会为该结构发出构造函数/析构函数。暗示POD结构的C风格技术将无法工作。 –

+0

在结构中存储矢量并不会使其更改大小。 Vector的项目存储在堆中,所以无论向量是0还是1000个元素,struct的大小都保持不变。 – mfontanini

回答

15

std::vector具有特定的已知大小,并且包含它的任何类或结构都具有特定的已知大小。 std::vector在堆上分配内存以充当可变大小的数组并存储指向所述内存的指针。结构和类之间唯一的区别是结构默认是公共的,而类默认是私有的。

+0

谢谢。这绝对有意义,该向量只能作为堆中的内存指针。感谢您的详细回复。 –

+0

默认?默认? – Inverse

7

structclass之间的差异与成员可见的事:最显着的区别是,struct的成员默认为公用,并且也是struct的继承默认情况下公开;默认情况下,class成员和class继承都是私有的。除此之外,没有任何区别:您可以始终使用struct编写代码,生成的代码等效于使用class编写的代码,反之亦然。

相关问题