std::vector<std::shared_ptr<Foo>> 同时保存动态和静态分配的 Foo



我有一个基类更新程序:

class Updater : public std::enable_shared_from_this<Updater>
{
    virtual void update(void) = 0;
};

具有许多衍生品,大多数是动态创建的,但有些是静态创建的。 这些将注册以执行一些批处理更新:

class DispatchGroup {
    std::vector<std::shared_ptr<Updater>> m_dispatchList;
};

给定一个派生类:

class UpdaterDerivate : public Updater {...};

我应该如何创建一个静态定义的 UpdaterDerivate 实例,它可以安全地参与 DispatchGroup::m_dispatchList?

初始化排序不是问题(调度组只能动态创建),因此关注的是如何避免m_dispatchList销毁尝试破坏(并释放)静态分配的 UpdaterDerivates。

使用不执行任何操作的删除器创建它:

struct NullDeleter // Or use <boost/core/null_deleter.hpp>
{ 
    template<class T> 
    void operator()(T*) const { /* do nothing */ }
};

然后:

UpdaterDerivate a;
std::shared_ptr<Updater> pa(&a, NullDeleter{});

最新更新