簡體   English   中英

擁有自定義矢量類。內存重新分配

[英]Own custom vector class. Memory reallocation

我想實現我自己的簡單矢量類。 即使保留的內存耗盡,此向量也應支持推送新元素(類型為T )。 所以,我需要分配一個新的內存塊,復制元素,然后釋放舊的內存塊。

如果我使用new T[]創建一個內存塊,那么我必須使用delete[]釋放它,這將使向量中的每個元素的構造函數被調用。 我不希望這樣,因為我想到只使用memcpy()復制舊的向量。

所以我想出了使用new char[]分配內存並使用placement new來填充數組的決定。 當我需要重新分配保留的內存時,我只在內存塊上使用memcpy() ,然后使用delete[]釋放它。

這是合理的解決方案嗎?

只有某些對象應該(通過,允許)通過memcpy “復制”。 這些被稱為普通類型 - 不能有自定義析構函數。

因此,使用memcpy來避免調用析構函數是矛盾的。 如果不需要后者,你只能被允許做前者。

考慮一下:通常, T可能有指向它自己成員的指針/引用(或同一向量中的其他T )。 如果使用memcpy移動這些對象,這些將繼續引用舊的(現在無效的)內存位置。 這正是T的構造函數和析構函數必須處理的(如果甚至允許復制/移動它們),那么省略它們將導致問題。

暫無
暫無

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

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