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

std::vector<std::shared_ptr<Foo>> holding both dynamically and statically allocated Foo

我有一个基地 class 更新者:

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:

class UpdaterDerivate : public Updater {...};

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

初始化顺序不是问题(DispatchGroups 只能动态创建),所以问题是如何避免 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{});