c++ shared-ptr weak-ptr private-inheritance enable-shared-from-this

c++ - Casos triviales de shared_ptr y weak_ptr fallando



shared-ptr weak-ptr (2)

Tengo problemas para usar shared_ptr y weak_ptr junto con enable_shared_from_this .

Cuando busco en Google los síntomas de lo que estoy viendo, todo el mundo sugiere "no puedes usar shared_from_this() cuando no hay instancias de shared_ptr posean tu objeto.

Pero ese no es mi caso.

Considere este código:

#include <memory> #include <cassert> class MyClass : std::enable_shared_from_this<MyClass> { public: void this_fails() { // Doesn''t even assert(), because it throws bad_weak_ptr assert(shared_from_this()); } void this_fails_too() { std::weak_ptr<MyClass> weak = weak_from_this(); std::shared_ptr<MyClass> strong = weak.lock(); // This assert fails assert(strong.get()); } }; int main() { std::shared_ptr<MyClass> obj = std::make_shared<MyClass>(); obj->this_fails(); obj->this_fails_too(); }

Ambos métodos en MyClass bloquean el programa. Debo estar perdiendo algo obvio, ¿qué es?


Debe heredar públicamente de std::enable_shared_from_this . Herencia privada no ayuda - std::shared_ptr no puede acceder a la clase base y configurarlo correctamente.


Debes heredar públicamente de std::enable_shared_from_this para que funcione.