幾天前,我看到一個關於C++中內存泄漏的採訪問題。 代碼就像(如果我沒記錯的話):如何避免設計實現級別的內存泄漏
#include <iostream>
using namespace std;
class super {
int value;
int arr[1000];
public:
super() :value(0) {}
super(int value) :value(value) {}
virtual int getValue() const{
return this->value;
}
};
class sub : public super {
int val;
super sup;
vector<int> v1;
public:
sub() :val(0), sup(0) {}
sub(int value) :val(value), sup(value), v1(10,0) {}
int getValue() const{
return this->val;
}
};
int main() {
sub* pt1 = new(sub);
super* pt2 = pt1;
pt1 = new(sub);
delete pt2; //memory leak ??
//more code here...
delete pt1;
return 0;
}
的問題是如何避免這種類型的內存泄漏在實現的設計水平。我想這個問題不僅僅是回答「不要使用像這樣的指針」。
它是否與將析構函數實現爲虛擬或使用動態轉換相關?我們如何實現析構函數,以便delete pt2
不會造成任何內存泄漏?任何人都可以進一步分析此示
在此先感謝。
我不明白這是如何泄漏內存。您正在通過指向其基類的指針刪除第一個「sub」對象,這應該沒問題,因爲'sub'不包含任何資源。如果是這樣,你必須在'super'中聲明一個虛擬析構函數。 –
我猜虛擬析構函數在這裏是缺少的請參閱http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – kwarnke
@RolandW是的我不記得這個例子的代碼。隨意編輯問題中的代碼,以便子類可以保存資源。 – BugShotGG