的std ::矢量<性病:: shared_ptr的<FOO>&GT;保持动态和静态分配Foo

时间:2017-02-02 18:07:03

标签: c++11 shared-ptr

我有一个基类更新程序:

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?

初始化排序不是问题(DispatchGroups只能动态创建),所以关注的是如何避免让m_dispatchList破坏试图破坏(和释放)我的静态分配的UpdaterDerivates。

1 个答案:

答案 0 :(得分:1)

使用无效的删除器创建它:

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{});