c++ casting null shared-ptr weak-ptr

c++ - ¿Por qué no puedo lanzar nullptr a weak_ptr<>



casting shared-ptr (2)

Debido a que un concepto weak_ptr solo se puede construir a partir de otro weak_ptr o shared_ptr . Simplemente no tiene sentido construir desde un puntero en bruto, ya sea nullptr o no.

Puede usar un valor weak_ptr construido ( std::weak_ptr<MyClass>() ) donde está tratando de usar nullptr :

auto newInstance = std::make_shared<MyClass>(std::weak_ptr<MyClass>()); void function(int arg,std::weak_ptr<MyClass> obj = std::weak_ptr<MyClass>());

class MyClass { public: MyClass(std::weak_ptr<MyClass> parent){} }

quiero hacer esto:

auto newInstance = std::make_shared<MyClass>(nullptr);

o el valor predeterminado del argumento weak_ptr es nulo, como por ejemplo:

void function(int arg,std::weak_ptr<MyClass> obj = nullptr);

Pero, lo que necesito es hacer esto en su lugar:

auto newInstance = std::make_shared<MyClass>(std::shared_ptr<MyClass>(nullptr));

¿porqué es eso?


El propósito principal de un puntero débil generalmente es saber si un objeto que podría ser destruido por otro código aún existe. ¿Cómo podría un puntero débil construido a partir de un puntero ordinario saber si el objeto todavía existe? ¿Puedes siquiera imaginar una forma en que esto podría funcionar?