Come copiare l'intero oggetto dietro boost::shared_ptr<T>
: ci sono opzioni di memcopy (basta creare un clone di memoria), o dovremmo creare un costruttore di copie?Come copiare in profondità l'oggetto completo dietro boost :: shared_ptr <T> in shared_ptr che punta a una nuova posizione?
risposta
è 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.
È 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.
perché il valore predefinito non sarà sufficiente? – DuckQueen
Poiché il costruttore di copie predefinito e 'operator =' eseguono una copia superficiale, non una copia profonda (in alcuni casi) –
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.
- 1. const shared_ptr to shared_ptr
- 2. come boost :: ~ shared_ptr funziona?
- 3. Casting shared_ptr <T> a shared_ptr <void>
- 4. Differenze tra tr1 :: shared_ptr e boost :: shared_ptr?
- 5. Come gestire l'evoluto C++ std :: namespace? es: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs boost :: shared_ptr vs boost :: tr1 :: shared_ptr
- 6. Downcasting shared_ptr <Base> to shared_ptr <Derived>?
- 7. static_cast con boost :: shared_ptr?
- 8. Inizializza Boost shared_ptr nel costruttore
- 9. boost shared_ptr casting to void *
- 10. Do boost :: shared_ptr <T> e boost :: shared_ptr <const T> condividere il conteggio dei riferimenti?
- 11. Inizializza boost :: shared_ptr su NULL
- 12. Devo controllare boost :: shared_ptr o std :: shared_ptr prima di usarlo?
- 13. Puntatore NULL con boost :: shared_ptr?
- 14. Come eliminare intenzionalmente un boost :: shared_ptr?
- 15. Per cosa è usato shared_ptr di boost (shared_ptr <Y> const & r, T * p)?
- 16. boost :: ptr_container e std :: vector <shared_ptr>
- 17. Come non entrare in shared_ptr in Xcode
- 18. C'è un modo per trasmettere shared_ptr <void> a shared_ptr <T>?
- 19. C++ 11 std :: shared_ptr + boost :: serializzazione
- 20. È buono il modo di nascondere shared_ptr dietro un typedef?
- 21. No-op deallocatore per boost :: shared_ptr
- 22. Personalizzazione di std :: shared_ptr o boost :: shared_ptr per generare un'eccezione su NULL dereference
- 23. Allocatore personalizzato (pool) con boost shared_ptr
- 24. "Connessione" SDL_Surface a shared_ptr
- 25. Riferendosi a "questo" come shared_ptr?
- 26. È un aliasing vuoto shared_ptr una buona alternativa a un no-op che elimina shared_ptr?
- 27. C++ allocazione di shared_ptr con C++ 11 (std :: shared_ptr): è ancora male inizializzare il parametro shared_ptr in una variabile temporanea?
- 28. Template un argomento shared_ptr
- 29. Esaminare shared_ptr spinta con gdb
- 30. Qt utilizzando boost :: shared_ptr in un segnale/slot
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? –