Jaka jest różnica między std::uninitialized_copy
a std::copy
i kiedy należy użyć której?Różnica między std :: uninitialized_copy & std :: copy?
Odpowiedz
Powiedzmy, że przydzieliliśmy trochę pamięci na stercie za pomocą malloc
i mamy do niej wskaźnik T* p
. Kończy się to niezainicjowanym przechowywaniem, ponieważ wszystkie wartości malloc
oznaczają lokalizację o żądanym rozmiarze (new
z drugiej strony faktycznie tworzy obiekty, a tym samym inicjuje przydzielony region pamięci masowej). Ponieważ lokalizacja pamięci począwszy od p
nie posiada ważnego obiektu typu T
siedzi tam, nie można zrobić tego
T a;
*p = a;
ponieważ nie ma żadnego obiektu typu T
na p
powołać się na operatora przypisania. Zamiast tego trzeba będzie skonstruować obiekt typu T
w miejscu p
użyciu placement new
:
T a;
new (p) T{a};
std::uninitialized_copy
prostu implementuje wersję zakres powyższego fragmentu kodu gdy ma do czynienia z zakresu, który chcesz skopiować do niezainicjowanej pamięci .
- 1. Różnica między std: string i std :: string
- 2. std :: copy i std :: vector problemem
- 3. Czy std :: move i std :: copy identical?
- 4. Jaka jest praktyczna różnica między std :: nth_element a std :: sort?
- 5. Różnica: std :: runtime_error vs std :: exception()
- 6. Jaka jest różnica między std :: condition_variable i std :: condition_variable_any?
- 7. Różnica między std :: vector i std :: array inicjatora wymienia
- 8. Jaka jest różnica między :: std :: string i std :: string?
- 9. Jaka jest różnica między std :: cout i std :: wcout?
- 10. Kopiowanie std :: wektor: preferowanie przypisania lub std :: copy?
- 11. Różnica między wektorami :: begin() i std :: begin()
- 12. Różnica między std :: końca (myvector) i myVector.end()
- 13. Jaka jest różnica między std :: tie a std :: make_tuple z argumentami std :: ref?
- 14. Różnice między std :: is_integer i std :: is_integral?
- 15. std :: mem_fun vs std :: mem_fn
- 16. std :: move Vs std :: forward
- 17. Jaka jest różnica między std :: to_string, boost :: to_string i boost :: lexical_cast <std::string>?
- 18. Jak duża jest różnica w wydajności między std :: sort i std :: stable_sort w praktyce?
- 19. Jaka jest różnica między std :: string i std :: basic_string? I dlaczego oba są potrzebne?
- 20. Różnica między std :: function <> a standardowym wskaźnikiem funkcji?
- 21. jaka jest różnica między używaniem ATOMIC_FLAG_INIT i std :: atomic_flag :: wyraźny
- 22. Jaka jest różnica między notify_all() a notify_one() of std :: condition_variable?
- 23. std :: mapowa różnica między wywołaniami indeksu i insertów
- 24. DockerFile: Różnica między ADD i COPY
- 25. C++ std :: copy z typem rzutowania na klasę pochodną możliwą?
- 26. Jak zwrócić wartość std :: copy w przypadku sukcesu lub niepowodzenia?
- 27. Dlaczego basic_string :: append (iter, iter) wywołanie std :: copy?
- 28. std :: move między std :: string i std :: vector <unsigned char>
- 29. std :: make_shared z std :: initializer_list
- 30. std :: bind do std :: function?
Twoja odpowiedź nails to, usunięte moje, +1. – vsoftco
Czy 'uninitialized_copy' jest dokładnie równoważne' memcpy'? –
@MattMcNabb To byłoby prawdą tylko wtedy, gdy są one trywialnie kopiowane, AFAIK. – Pradhan