簡體   English   中英

C ++ STL容器插入副本

[英]C++ STL container insertion copy

我試圖用std :: vector編寫用戶定義的對象。

我了解到對於用戶定義的類,如果“復制構造函數”和“賦值運算符”是公共的,則只能將其對象插入STL容器中。
這是由於兩個原因:

  1. 所有STL都始終存儲插入對象的副本,而不是實際的副本。 因此,每當我們在容器中插入任何元素或對象時,都將調用其復制構造函數來創建一個副本,然后將此副本插入到容器中。
  2. 在std :: vector中插入時,可能由於空間不足而在內部進行存儲重定位。 在這種情況下,將對容器內的對象調用賦值運算符,以將其從一個位置復制到另一位置。


為什么所有STL容器始終存儲插入對象的副本,而不是實際的副本?
我不明白為什么它們不允許存儲實際對象。 缺點是什么?

C ++中的標准容器分配它們管理的內存。 如果程序創建了一個對象,則該對象位於另一個內存位置,因此要成為容器的一部分,將在容器的內存中創建一個副本。

代替復制,可以完成移動,但是在許多情況下,這樣做效率不高,有時甚至很不方便。

避免復制的一個好的解決方案是使用emplace -functions在容器中直接創建對象。

關於向量增長,因為新向量可能必須位於不同的內存地址並且內存中包含對象,因此必須移動或復制它們。 該答案顯示了如何使向量在調整大小時移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM