Mi clase hereda de múltiples bases, una de las cuales es std::enable_shared_from_this
. ¿Debe ser la primera base?
Supongamos el siguiente código de ejemplo:
struct A { ~A(); };
struct B { ~B(); };
struct C : A, B, std::enable_shared_from_this<C> {};
std::make_shared<C>();
Cuándo ~A()
y ~B()
ejecutar, ¿puedo estar seguro de que el almacenamiento donde C
vivía todavía está presente?
enable_shared_from_this
debe ser una base accesible e inequívoca. En mi ejemplo, lo es. C
es una estructura Hereda públicamente.
class
y public
. Elegí struct
el ejemplo para evitar escribir.
~weak_ptr();
Efectos: destruye este weak_ptr
objeto pero no tiene ningún efecto sobre el objeto al que apunta su puntero almacenado". El énfasis es mío.
shared_ptr
muere. Incluso si weak_ptr
evita que el bloque de control sea desasignado, no creo que importe.
std::enable_shared_from_this
no hace mucho. Su ejemplo se ve bien para mí (suponiendo que no está tratando de hacer algo inteligente en~A
y~B
, al igual que hacia abajo de fundición a presiónthis
aC*
)