2013-03-21 12 views

risposta

0

è necessario creare un costruttore di copia e scrivere qualcosa di simile:

ptr.reset(new T); 
*ptr = *(otherObject.ptr); 

al fine di copia completa il puntatore.

+0

Perché scrivere un costruttore di copie se non si intende utilizzarlo? In alternativa, perché non consigliare _using_ il costruttore di copie che suggerisci di creare? –

1

È necessario un costruttore di copia o un operator= che eseguirà la copia profonda.

boost::shared_ptr non può sapere la struttura dell'oggetto per farlo. Né può un'operazione "clone della memoria".

Naturalmente, questo è solo per gli oggetti, che hanno bisogno di un costruttore di copia esplicitamente definito/operator= e quelli "banali" fanno una copia superficiale.

+0

perché il valore predefinito non sarà sufficiente? – DuckQueen

+0

Poiché il costruttore di copie predefinito e 'operator =' eseguono una copia superficiale, non una copia profonda (in alcuni casi) –

1

Se si conosce il tipo esatto dell'oggetto, è necessario utilizzare un costruttore di copia o un operatore di assegnazione copia.

Se gli oggetti sono un'istanza di una classe in una gerarchia di ereditarietà e non si conosce il tipo esatto dell'oggetto, è necessario utilizzare una funzione di clonazione virtuale.

Problemi correlati