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.