有人请指出我正确的方向。我想要一个"静态" (单数实例)std :: list,所以std :: list在具有" Container"的实例的所有对象中共享。结构见下文。但是,结构中的所有其他元素对于每个实例都是唯一的。
我在哪里放置关键字" static"对于派生的std :: list?
注意关键字" static"以下是错位的,因为我根本不知道在这种情况下应该在哪里。
struct Container : public static std::list<int>
{
public:
Container()
{}
~Container()
{}
list<int*> Handles;
}; // struct
答案 0 :(得分:7)
你不需要继承;最好的方法是拥有一个静态成员:
struct Container {
static std::list<int> list_;
}
也没有静态继承,因此我建议您实施自己的get
,insert
,remove
方法来修改内部静态列表。
答案 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.