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{});
我有一个基地 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{});