在类定义中声明一个包含类本身的vector

declare a vector that contains the class itself in the class definition

本文关键字:包含类 一个 vector 定义 声明      更新时间:2023-10-16

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

class Node {
    public:
        Node node;
};

然而,像这样声明一个向量是正确的,为什么?

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

它在我使用的c++ 14编译器中工作得很好。它还提供了一种非常方便的模式,可以在"单个"实例中表示任意大的复杂树形数据结构。一个很好的属性是,整个树的所有存储管理都由std::vector自动处理。例如,您可以在Foo类中拥有Node成员变量,并且当您完成封闭Foo实例时,不必担心删除树。

正如其他地方所描述的(我如何声明同一个类的成员向量?),这对编译器来说不是问题,因为std::vector<Node>本身的大小与Node的大小无关,因为std::vector是一个固定大小的头,带有指向堆上一个单独的托管存储块的指针。