class A {
....
};
class B: public A {
int x;
...
};
class C: public A{
A * ptr;
.....
};
class D : public A {
A* ptr1;
A* ptr2;
....
};
注:我提出的所有構造函數B,C,d只是不包括他們在那裏。 所以A(沒有字段)是超類,我有3個子類(B,C和D),每個都有不同的字段。(C++)子鏈破壞調用析構函數時
A是一個抽象類,它的大部分鏈接類(B,C,d)的
所以像我可能喜歡
B *x = new B {5};
B *x2 = new B {5}
D * y = new D{x,x2);
的情況所以,當我做delete y;
我要打它連鎖破壞了它的兩個領域(B對象)的兩個指針。我如何讓D類的析構函數然後鏈式破壞?
就像我展示的例子非常簡單,但其他例子有越來越多的圖層。我想確保一切都被刪除,所以不會發生內存泄漏。
我的D類Dtor應該是這樣嗎?
~D(){
delete ptr1;
delete ptr2;
}
對於C類的情況,我會這麼做嗎?
~C(){
delete ptr;
}
因爲我這樣做,它不工作我得到內存泄漏,所以最新錯了?
你是否聲明你的析構函數是虛擬的? – Falmarri
A級否。我認爲我可以重寫,如果我在子類中創建一個@Falmarri –
它應該使類A析構函數是純虛擬的,並且我真的不需要爲B類做一個破壞,它可以使用它的默認權限? –