在类定义中声明包含类本身的向量

时间:2014-07-17 10:24:10

标签: c++

在c ++中,我们都知道这段代码是错误的:

class Node {
    public:
        Node node;
};

但是,声明这样的矢量是对的,为什么?

class Node {
    public:
        std::vector<Node> nodeVec;
};

1 个答案:

答案 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是固定大小的标头,带有指向堆上单独的托管存储块的指针。