У меня есть базовый класс Updater:станд :: вектор <станд :: 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 ?
Порядок инициализации не является проблемой (DispatchGroups могут быть созданы только динамически), поэтому проблема заключается в том, как избежать разрушения m_dispatchList, пытающегося уничтожить (и бесплатно) мои статически распределенные UpdaterDerivates.
не Разве это не требует всех, кто использует shared_from_this(), чтобы быть в курсе типа распределения? Или какой-то процесс перемещается через общие элементы shared_ptr? – Speed8ump
@ Speed8ump The последний. –
@ Speed8ump [std :: enable_shared_from_this] (http://en.cppreference.com/w/cpp/memory/enable_shared_from_this): _ Если объект t типа T управляется std :: shared_ptr с именем pt, то вызов T :: shared_from_this вернет новый std :: shared_ptr , который владеет правом собственности на t с pt._ –