這是我第一次使用STL
,我對如何解除這些容器使用的內存的解除分配感到困惑。例如:處理解析器中的stl容器的解除分配問題
class X {
private:
map<int, int> a;
public:
X();
//some functions
}
現在讓我們說,我定義構造函數:
X::X() {
for(int i=0; i<10; ++i) {
map[i]=i;
}
}
現在的問題是,我應該爲此類編寫或默認C++
析構函數將取消分配的護理析構函數內存(完全)?
現在考慮修改上面的類
class X {
private:
map<int, int*> a;
public:
X();
~X();
//some functions
}
現在讓我們說,我定義構造函數:
X::X() {
for(int i=0; i<10; ++i) {
int *k= new int;
map[i]=k;
}
}
現在我明白了,對於這樣一類我需要寫一個析構函數由new分配的內存不能由容器的默認析構函數(因爲它調用在這種情況下是對象的析構函數)來破壞容器。所以,我試圖寫下面的析構函數:
X::~X {
for(int i=0; i<10; ++i) {
delete(map[i]);
}
//to delete the memory occupied by the map.
}
我不知道如何刪除由map
佔用的內存。儘管clear
函數在那裏,但它聲稱會將容器的大小降低到0,但不一定會釋放下面的內存。與矢量也是一樣(我猜在STL中有其他容器,但我沒有檢查它們)。
任何幫助表示讚賞。
那麼答案是明確的,但通過刪除我從來沒有表示'刪除'。我的意思是破壞記憶(否則我會把它放在反引號中)。我的意思是我沒有在STL文檔中看到這樣做的函數。無論如何,謝謝你。 –
@AmanDeepGautam:與任何對象一樣,沒有任何功能來釋放它的內存。對象被銷燬並根據其生命週期釋放內存:自動對象,因爲它們超出範圍,程序結束時的靜態對象以及刪除時的動態對象。 –
這就是讓我困惑的原因。我現在明白了。謝謝。 –