說我有以下類:默認析構釋放的類的陣列成員,C++
class A {};
Class C {
private:
A a[10];
};
int main() {
C c;
}
將這個代碼導致內存泄漏?如在中,編譯器將爲C類定義的缺省析構函數是否可以成功釋放A對象數組的內存?
我想檢查自己,但我無法弄清楚如何在OSX 10.7 Valgrind的運行...
說我有以下類:默認析構釋放的類的陣列成員,C++
class A {};
Class C {
private:
A a[10];
};
int main() {
C c;
}
將這個代碼導致內存泄漏?如在中,編譯器將爲C類定義的缺省析構函數是否可以成功釋放A對象數組的內存?
我想檢查自己,但我無法弄清楚如何在OSX 10.7 Valgrind的運行...
這不會泄漏。如果你想確認,在A
的析構函數中加入一條調試語句。
編輯:簡單的例子...
#include <iostream>
class A
{
public:
A() { std::cout << "A::A()" << std::endl; }
~A() { std::cout << "A::~A()" << std::endl; }
};
Class C {
private:
A a[10];
};
int main() {
C c;
}
現在編譯和運行上面的例子中,應該產生第一調試語句的10個實例和第二調試語句的10個實例。當銷燬A
的10個實例時會生成最後10條語句(這是爲您自動完成的 - 因此,術語自動存儲器,當它們超出範圍時 - 在這種情況下,即當C
[其中擁有它們]超出範圍[在main
的末尾]。)
沒有也不會造成內存泄露。這些類根本不使用新的,所以沒有在堆中動態分配內存。
內存泄漏問題僅出現在動態內存分配上。對於自動分配的內存(通常在堆棧或數據段)沒有內存泄漏。
「class A」是一個空類嗎? – Stan
@Stan:看看代碼,'A'看起來確實是空的。但是,這對泄漏沒有任何影響。 –
@ phresnel - 我明白了。我只是想知道azphare在'A'中遺漏了什麼。 – Stan