我有此類:C++ - 適當的方式來對堆清除類矢量
class GameData
{
public:
GameData();
~GameData();
vector<Bullet> bullets;
}
在主程序中,我創建GAMEDATA指針和用於將其與新的分配內存。我知道新的,你也應該刪除數據。上面的向量不是Bullets指針的向量,只是Bullets本身(它們應該是指針嗎?)在〜GameData()函數中,我需要清理子彈需要什麼?我應該確保它是空的,如果不清楚它?爲了良好的內存管理,「刪除」它的具體方法是什麼?如果我的設計錯誤,請讓我知道我應該如何處理這個問題。
感謝
@Als當然。象vector中的所有容器一樣,vector也具有值語義。向量中的對象的行爲就好像它們是向量的成員一樣,並且只要對象不再處於向量中,它就會被正確地破壞。 – 2012-04-20 07:27:56
@JamesKanze:是的。但是任何標準庫容器都不會獲得指針成員(原始或智能)的所有權,即。釋放動態內存的責任取決於用戶或內置的RAII語義(在智能指針的情況下)。從容器的角度來看,這是有意義的,因爲容器沒有任何指針元素的所有者知識。它沒有「甚至不知道是否在這方面的分配是在freestore上進行的。 – 2012-04-20 07:30:55
@Als這是因爲「所有權」是一種人爲的概念,很少與任何事物相關。容器中的對象不是容器「擁有」的,它們邏輯上是容器的一部分。對於任何其他類而言,容器的唯一特殊性是它的一部分對象可以動態變化。如果對象具有指針類型,當然,它是指向容器一部分的指針,而不是它們指向的任何指針。 – 2012-04-20 08:05:51