在C++ 11移動語義之前,如果有一個需要重新分配的緩衝區,例如在一個std :: vector實現中,對push_back的調用導致重新分配,那麼只需memcpy舊緩衝區即可內容到新緩衝區中,還是應該遍歷舊緩衝區並將每個元素複製到新緩衝區中?memcpy在緩衝區重新分配中可以嗎?
1
A
回答
4
使用std::copy
,它應該像編譯器編寫器允許的那樣完全優化。
3
移動語義不會神奇地使對象memcpy
成爲可能。例如:
struct S {
S(int ii) : i(ii), ip(&i) { }
int i;
int *ip; // points to i
};
當這種類型的一個對象被複制或移動,的ip
副本中的值不能從原始對象中的值;必須將其更改爲指向新對象的i
成員。 memcpy
將不是得到這個權利;它會將舊地址複製到新對象中,結果將是無意義的。複製構造函數和移動構造函數必須正確設置ip
。
正如@markransom所說,使用std::copy
。它會得到正確的語義。特別是對於可以用memcpy
複製的類型,它(通常)會這樣做。
相關問題
- 1. 用的memcpy爲緩衝區
- 2. 如何在VIM中重新分配緩衝區編號?
- 3. 的memcpy從一個char *緩衝區一個wchar_t的*緩衝區
- 4. RapidXML API可以增加緩衝區嗎?
- 5. RSA_private_decrypt/RSA_public_encrypt中的緩衝區可以重疊嗎?
- 6. 我可以從C++中的std :: string分離緩衝區嗎?
- 7. 在C中緩衝區的分配
- 8. 是否有可能malloc()分配一個緩衝區重疊使用mmap()分配的另一個緩衝區?
- 9. 緩衝區內存分配
- 10. 圖形緩衝區分配
- 11. 如何防止memcpy緩衝區溢出?
- 12. 重複調用glBufferData未能爲新緩衝區分配內存
- 13. 讀取功能:複製緩衝區,重新分配內存
- 14. 從cuMemcpyHtoDAsync返回後可以重用主機緩衝區嗎?
- 15. 是否可以使用預分配緩衝區的Boost.Format?
- 16. node.js中的緩衝區分配
- 17. 在WebRTC中可以緩衝嗎?
- 18. 有人可以幫助我在Node.Js中設置緩衝區嗎?
- 19. 我可以返回在函數中創建的緩衝區嗎?
- 20. 爲recv部分分配緩衝區
- 21. TCP緩衝區中的包總長度是否可以超過分配的緩衝區大小?
- 22. 你可以在Windows波形音頻輸入中重複使用緩衝區嗎?
- 23. 區分Vim中的隱藏緩衝區和活動緩衝區
- 24. Emacs中緩衝區的重定位分配器是什麼?
- 25. 將模板緩衝區模糊到顏色緩衝區中。可能嗎?
- 26. 可可代碼 - 如何重新分配我在下面使用的方法中的緩衝區?
- 27. 的memcpy整數緩衝
- 28. 我可以直接寫入OpenGL中的顏色緩衝區嗎?
- 29. 可以在繪製時查看後臺緩衝區嗎?
- 30. 我可以在偏移量處翻轉SDL緩衝區嗎?