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 Cvivía todavía está presente?
enable_shared_from_thisdebe ser una base accesible e inequívoca. En mi ejemplo, lo es. Ces una estructura Hereda públicamente.
classy public. Elegí structel ejemplo para evitar escribir.
~weak_ptr(); Efectos: destruye este weak_ptrobjeto pero no tiene ningún efecto sobre el objeto al que apunta su puntero almacenado". El énfasis es mío.
shared_ptrmuere. Incluso si weak_ptrevita que el bloque de control sea desasignado, no creo que importe.
std::enable_shared_from_thisno hace mucho. Su ejemplo se ve bien para mí (suponiendo que no está tratando de hacer algo inteligente en~Ay~B, al igual que hacia abajo de fundición a presiónthisaC*)