0

有人请指点我正确的方向。我想要一个“静态”(单一实例)std::list,因此 std::list 在所有具有如下所示“Container”结构实例的对象中共享。但是,结构中的所有其他元素对于每个实例都将保持唯一。

我在哪里为派生的 std::list 放置关键字“static”?

请注意,下面的关键字“static”放错了位置,因为在这种情况下我根本不知道它应该放在哪里。

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

public:

    Container()
    {}

    ~Container()
    {}

    list<int*> Handles;

}; // struct
4

4 回答 4

7

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

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

也没有静态继承,所以我建议实现你自己的get,insert方法remove来修改内部静态列表。

于 2013-05-10T09:04:18.607 回答
1

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

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

    // ...
}

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

于 2013-05-10T09:06:02.390 回答
0

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

struct Container
{
public:
    Container()
    {}

    ~Container()
    {}

public:
    static std::list<int*> Handles;
}; // struct
于 2013-05-10T09:06:27.477 回答
0

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

Base* b = new derived();

// do stuff

delete b; // will not destroy derived properly because base has no virtual destructor.
于 2013-05-10T09:07:55.147 回答