¿Por qué shared_from_this no se puede usar en constructor desde el punto de vista técnico?
Enel libroLa biblioteca estándar de C ++ en la página 91 he leído esto sobreshared_from_this()
:
El problema es eseshared_ptr
se almacena en un miembro privado dePerson
Clase base,enable_shared_from_this<>
, al final de la construcción de la Persona.
El fragmento de código relevante del libro es:
class Person : public std::enable_shared_from_this<Person> {
...
};
No entiendo dos cosas aquí:
quien es esteshared_ptr
que se almacenacómo puede almacenarse en cualquier lugar al final de la construcción dePerson
? Creo que la construcción dePerson
termina con la última declaración de su constructor que escribí por mí.Entiendo que hayweak_ptr
que aún no se ha inicializado.
EDITAR: ¡Gracias a Angew!shared_from_this
funcionará solo después del primeroshared_ptr
aPerson
fue creado. Estashared_ptr
comprobará siPerson
clase heredada deenable_shared_from_this
, y si es así, inicialice su internoweak_ptr
.