我正在閱讀C++ Primer,3rd Ed(Lippman and Lajoie),它的意思是當一個向量需要重新分配以便爲更多元素增加空間時使用push_back()
,這些元素在新空間中複製構建,然後在舊元素上調用析構函數。我很困惑爲什麼這是必要的 - 爲什麼數據不能被複制一點點?我假設答案與動態內存分配有關,但我目前的理由是,即使向量元素處理動態內存,實際存儲在元素中的數據也將是指針,這意味着逐位複製將保留它們指向的位置並且不會出現任何問題。我可以看到如何重新定位元素指向的動態分配內存會是一個問題,因爲它會使指針無效,但據我所知,向量重新定位沒有理由這樣做。C++:自動向量重新分配調用複製構造函數?爲什麼?
有人可以給我一個簡單的例子,不應該一個一個地移動一個類?
構想函數/析構函數注意/註銷具有父對象的類的地址的情況出現了。 –
想到類型不是_trivially copyable_的場景。 –
ta.spot.is有一個很好的例子,但我不會將每個對象註冊表都稱爲「父級」。另外,有些類可能會保留指向自己數據成員的指針 - 例如,模擬某種模態狀態,並指出某些未來操作現在應該影響該特定成員,或者將迭代器放入內部向量中。 –