Tengo dos clases con una relación padre-hijo (cliente & fin directorio de archivos & etc)impulso shared_ptr y 'esto'
tengo
typedef boost::shared_ptr<Parent> ParentPtr
y en la clase padre de un método para hacer una hijo
Necesito instancias hijo para tener punteros a su padre.
class Child
{
....
ParentPtr m_parent;
....
}
Quiero que sea un shared_ptr para que el padre no desaparece, mientras que hay niños existentes. También tengo otras personas que tienen ParentPtrs al padre (el método de fábrica para los padres devuelve un ParentPtr)
Pregunta: ¿cómo se puede dar al niño un intento ParentPtr
(1). En Padres :: ChildFactory
child->m_parent.reset(this);
esto se traduce en cosas muy malas. Ahora hay 2 ParentPtr 'cadenas' apuntando al padre; el resultado es la muerte prematura de la matriz
intento (2). El padre tiene
ParentPtr m_me;
que se copia del valor de retorno de la fábrica principal. Por lo que puedo hacer
child->m_parent = m_me;
Pero ahora los padres nunca muere, ya que contiene una referencia a sí mismo
excelentes respuestas - gracias – pm100
@ pm100: ¿Por qué necesita usar un 'weak_ptr'? Si los niños son dueños de sus padres (los comparten entre ellos), entonces necesitas usar 'shared_ptr'. Un 'weak_ptr' no implica propiedad. –
oh sí, estás en lo correcto - estaba pensando en una solución diferente - eliminando edit – pm100