Большая часть этой функциональности включена в стандарт C ++. Если вы не можете использовать такую последнюю версию, тогда библиотеки наддува почти идентичны, и вы можете заменить std::
на boost::
здесь.
Для создания shared_ptr
или weak_ptr
из необработанного указателя вы должны быть производными от enabled_shared_from_this
, например:
class Foo : public std::enabled_shared_from_this<Foo> // C++11
{
};
...
Foo *ptr = ...;
std::shared_ptr<Foo> a = foo->shared_from_this(); // C++11
std::weak_ptr<Foo> b = foo->weak_from_this(); // C++17
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * * * * * * * * * * * * * * * * * * * * * * *). *1010* Добавит небольшой размер к вашему типу, но затем make_shared
добавит к типу, который его не использует, поэтому, если это важно, или часто для простоты, есть unique_ptr
(C + +11) это больше похоже на необработанный указатель.
Обычно все же не имеет смысла пытаться создать объект из выделенного стека объекта, так как shared_ptr не будет препятствовать его удалению, как обычные локальные переменные, и фактически может вызвать двойное удаление. Вы можете сделать несколько трюков, например, «удалить» для второй проблемы.
В случае Foo *ptr
вам также необходимо убедиться, что некоторые другие shared_ptr
для него все еще существуют, иначе ptr
, возможно, уже был удален.