Ver: http://boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html#in_constructor
El problema no es que el objeto no se construye. El problema es que shared_ptr no se ha construido. Si todo lo que hiciera sería crear un shared_ptr y enviarlo a algún lado, todo estaría bien. Es cuando intentas crear un shared_ptr para contener el objeto que acabas de crear. No hay forma de conectar los dos y, por lo tanto, tienes un gran problema.
La forma en que shared_from_this funciona es que espera que pongas el objeto es un shared_ptr antes de llamar a shared_from_this para obtener acceso a él. Como todavía no lo ha hecho, dado que el constructor del objeto no ha terminado y, por lo tanto, shared_ptr no está conectado a él, no puede llamar a shared_from_this.
usted tendría exactamente el mismo problema con el weak_ptr.
tanto, en otras palabras, esta absurda construcción funcionaría:
struct absurd
{
absurd()
{
register(shared_ptr<absurd>(this));
}
};
...
new absurd; // better not assign to a shared_ptr!!!
Pero realmente no quiero hacer esto.
Se puede publicar un enlace a los mensajes en el foro discuten 'weak_from_raw()'? –
No piense Soo, "weak_ptr almacena una 'referencia débil' a un objeto que ya está gestionado por una shared_ptr". – ronag
@ Sam http://groups.google.com/group/boost-list/browse_thread/thread/36d8e06194227408/5625f636b47fdb96?pli=1 – James