我創建了一個子級,B,爲此,我會打電話給A.創建一個'新'實例解決了析構函數崩潰?
我寫了這個工作代碼的類,所以我要推廣的實際代碼:
class A
{
public:
A()
{
important_variable = new Type();
...
};
~A (void) { delete(important_variable); }; // Default destructor
// more methods
protected:
Type *important_variable;
};
class B : public A
{
public:
B() : A() { important_variable = another_var; }
~B() {};
Type *another_var;
};
有了這個B代碼導致我的程序崩潰了'未處理的異常'。
現在,當我爲B類代碼改成這樣:
class B : public A
{
public:
B() : A() { another_var = new Type(); important_variable = another_var; }
~B() {};
Type *another_var;
};
異常消失。
我認爲我原來的B代碼導致我的程序崩潰,因爲A試圖刪除一個仍然被另一個變量指向的變量。這個推理是否正確?爲什麼B的新代碼會導致我的程序正常工作?
你的推理可能是正確的(不能說沒有看到更多的代碼)。第二個代碼的作用是因爲您爲每個實例創建了一個新對象,所以每次刪除一個對象時,它都不會踩到其他對象的腳趾。但是你的代碼有內存泄漏。你不能只重新分配一個指針而不做一些關於它指向的對象的東西。 – Dave