我有一个基类更新程序:
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。
答案 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{});