在c ++中,我们都知道这段代码是错误的:
class Node {
public:
Node node;
};
但是,声明这样的矢量是对的,为什么?
class Node {
public:
std::vector<Node> nodeVec;
};
答案 0 :(得分:0)
它在我使用的C ++ 14编译器中正常工作。而且它提供了一种非常方便的模式,用于表示“单个”实例内任意大的复杂树形数据结构。一个不错的属性是整个树的所有存储管理都由std::vector
自动处理。例如,您可以在类Node
中拥有一个Foo
成员变量,而不必担心在封闭Foo
实例后删除树。
正如其他地方(How can I declare a member vector of the same class?所描述的那样,对于编译器来说这不是问题,因为std::vector<Node>
本身的大小与Node
的大小无关,因为std::vector
是固定大小的标头,带有指向堆上单独的托管存储块的指针。