Qual è la differenza tra std::uninitialized_copy
e std::copy
e quando dovrei usare quale?Differenza tra std :: uninitialized_copy e std :: copy?
risposta
Supponiamo di aver allocato un po 'di memoria nello heap tramite malloc
e di avere un puntatore T* p
. Si finisce con l'archiviazione non inizializzata perché tutto il malloc
fa contrassegnare una posizione della dimensione richiesta come allocata (new
d'altra parte effettivamente costruisce oggetti e quindi rende la memoria inizializzata della regione allocata). Dal momento che la posizione di memoria a partire da p
non ha un oggetto valido di tipo T
seduto lì, non si può fare questo
T a;
*p = a;
poiché non v'è oggetto di tipo T
a p
per richiamare l'operatore di assegnamento su. Invece, si avrà un costrutto un oggetto di tipo T
in posizione p
utilizzando placement new
:
T a;
new (p) T{a};
std::uninitialized_copy
implementa semplicemente la versione gamma del frammento di codice di cui sopra quando si tratta di una gamma che si desidera copiare nella memoria non inizializzata .
- 1. Differenza tra std :: set e std :: priority_queue
- 2. Differenza tra std: string e std :: string
- 3. Differenza tra std :: logical_not e std :: not1?
- 4. Differenza tra std :: eccezione e "..."
- 5. Differenza tra std :: regex_match & std :: regex_search?
- 6. Qual è la differenza tra std :: partial_sum e std :: inclusive_scan?
- 7. Qual è la differenza tra std :: movimento e std :: avanti
- 8. Qual è la differenza tra std :: transform e std :: for_each?
- 9. Differenza tra std :: vector e std :: array di inizializzazione elenca
- 10. Qual è la differenza tra std :: cout e std :: wcout?
- 11. Qual è la differenza tra std :: function e std :: mem_fn
- 12. std :: copy gestisce intervalli sovrapposti?
- 13. Perdita di risorse nell'esempio Stroustrup con std :: uninitialized_copy?
- 14. Differenza tra vector :: begin() e std :: begin()
- 15. Differenza tra std :: end (myVector) e myVector.end()
- 16. std :: copy/memcpy/memmove ottimizzazioni
- 17. Inseritore personalizzato per std :: copy
- 18. Differenze tra std :: is_integer e std :: is_integral?
- 19. Scelta tra std :: map e std :: unordered_map
- 20. Problema con l'utilizzo di std :: copy
- 21. Differenza di using namespace (std :: :: vs std: :)
- 22. Conversione tra std :: tuple e boost :: tuple
- 23. Differenza tra le opzioni di compilazione gcc std = C++ 1y e std = C++ 14
- 24. Differenza tra std :: is_signed <T> e std :: numeric_limits <T> :: is_signed?
- 25. Qual è il motivo della differenza nel comportamento di distruzione tra std :: unique_ptr e std :: shared_ptr?
- 26. Differenza tra std :: asincrono e std :: bind quando l'involucro rvalue riferimento lambda
- 27. Qual è la differenza tra std :: to_string, boost :: to_string e boost :: lexical_cast <std::string>?
- 28. Qual è la differenza tra "std :: string const & s" e "const std :: string & s"?
- 29. Qual è la differenza tra std :: valarray e std :: array di
- 30. differenza tra Java e C++ copy constructor
La tua risposta lo inchioda, cancella il mio, +1. – vsoftco
È 'uninitialized_copy' esattamente equivalente a' memcpy' in effetti? –
@MattMcNabb Questo sarebbe vero solo se sono banalmente copiabili, AFAIK. – Pradhan