如何自动维护类实例列表?

Int*_*ble 2 c++ class list instance stdvector

在我的C ++项目中,我有一个Engine类和一个Object类。

我的问题在于如何Object创建实例。当前,这是通过使用类中的CreateObject(parameters)函数来完成的Engine。这增加的新实例Objectstd::vectorObject实例。

我想维护此类Object在我的Engine类中的实例列表,但不需要此CreateObject(parameters)功能。我这样做的原因是,我可以创建可以继承Object但仍添加到此列表的新类。使用此列表的原因是为了使(Engine可以)我可以遍历Object已创建的每个实例。

最终这将意味着我Object用类似的实例创建实例Object newObject = Object(parameters);,但仍使Engine该类维护所有Object实例的列表,而无需Object引用的实例Engine或将其自身添加到此列表的列表(如Objectshould 的实例)不知道它所在的列表)。 能做到吗?

Cod*_*key 5

您可以在Engine类中定义静态集合数据成员,并在Object构造函数和析构函数中对其进行更新:

class Engine
{
    friend class Object;
...
public:
    static std::set< Object* > m_instances;
};

class Object
{
public:
    Object();
    virtual ~Object();
    ...
};
Run Code Online (Sandbox Code Playgroud)

您可以在构造函数中增加它,而在析构函数中减少它。

Object::Object()
{
    Engine::m_instances.insert(this);
}

Object::~Object()
{
    Engine::m_instances.erase(this);
}
Run Code Online (Sandbox Code Playgroud)