這是this question的擴展。我在網上搜索,但無法找到滿意的答案。刪除向量中的元素(對象)(未由指針引用),內存處理
我有一個class A
它定義了一個向量,其中包含多個class Region
的實例。該內存處理這些Region
情況下需要由Class A
我的問題管理是:
在下面的代碼片段,我需要在A類desctuctor明確刪除這些實例?
2.我應該創建new Region(i)
的實例嗎?是否比第一個選項更好(不使用new
)A類是一個相當大的對象。我應該如何確定是否使用新的?
3.如果對#2的回答是肯定的,我應該如何在析構函數中刪除這些實例? delete Region(i)
(在for循環中)或delete [] reg
??我猜以前的方式是正確的方式,但要確認。
4.除了「區域實例不被刪除」,你是否看到任何明顯的內存泄漏......特別是在A
的構造函數中構造Region對象?
class Region{
public:
Region(int num);
int number;
std::vector <elemt*> elements;
int info;
}
class A{
public:
std::vector<Region> reg;
const int numOfRegions = 100;
}
A::A(){
int i;
for (i=0; i<numOfRegions; i++){
reg.push_back(Region(i));
}
}
A::~A(){
// How should the elements within vector Region be deleted??
// Should I use "new" to allocate memory to instances of Region()
}
UPDATE: 非常感謝所有誰回答!
@尼爾:很好的答案。你們是非常有幫助的(並且總是在那裏尋求幫助)。我只是有一個疑問,在上面的代碼中,我已經說明了Region實例是在類A的構造函數中添加的。但是,如果我要在運行時通過調用類A上的方法來填充此列表: :addRegions(int num),我應該在這種情況下使用「新」嗎?或者我應該堅持使用當前的代碼? – memC 2010-02-10 12:08:00
@memC:它是確定如何向其中添加項目的向量。如果在構造函數中:'reg.push_back(Region(i))',那麼您需要類似於'A :: addRegions(int num);'方法的東西。所以我說的還是不要使用'new'。 – quamrana 2010-02-10 12:14:30
@memC您可以在施工時或以後進行。當然,你將不得不提供一個成員函數來完成它。無論哪種情況,都不需要使用新建對象。 – 2010-02-10 12:15:23