派生的public static std :: list

时间:2013-05-10 09:02:26

标签: c++

有人请指出我正确的方向。我想要一个"静态" (单数实例)std :: list,所以std :: list在具有" Container"的实例的所有对象中共享。结构见下文。但是,结构中的所有其他元素对于每个实例都是唯一的。

我在哪里放置关键字" static"对于派生的std :: list?

注意关键字" static"以下是错位的,因为我根本不知道在这种情况下应该在哪里。

struct Container : public static std::list<int>
{

public:

    Container()
    {}

    ~Container()
    {}

    list<int*> Handles;

}; // struct

4 个答案:

答案 0 :(得分:7)

你不需要继承;最好的方法是拥有一个静态成员:

struct Container {
    static std::list<int> list_;
}

也没有静态继承,因此我建议您实施自己的getinsertremove方法来修改内部静态列表。

答案 1 :(得分:1)

你不应该继承std::list;相反,你似乎想要一个静态成员:

class Container
{
    static std::list<int> SingleList;

    // ...
}

通过创建一个成员变量static,该变量只有一个实例,在它声明的类的所有实例之间共享。就像你想要的那样。

答案 2 :(得分:0)

我相信静态成员适用于您的情况。

struct Container
{
public:
    Container()
    {}

    ~Container()
    {}

public:
    static std::list<int*> Handles;
}; // struct

答案 3 :(得分:0)

正如其他人所说,从标准容器继承是不好的,这是不好的原因是因为标准容器没有定义virtual析构函数。这意味着在破坏时,当试图通过指向基础的指针销毁它时,你不会正确地破坏派生对象。

Base* b = new derived();

// do stuff

delete b; // will not destroy derived properly because base has no virtual destructor.