[問題] delete 二維陣列與類別建構解構函式
class A{
private:
static int countA;
public:
A(){
countA++;}
~A(){countA--;}
static void numA(){cout<<"A`s instance:"<<countA<<endl;}
};
int A::countA=0;
class B:public A
{
private:
static int countB;
public:
B(){countB++;}
~B(){countB--;}
static void numB(){cout<<"B`s instance:"<<countB<<endl;}
};
int B::countB=0;
int main()
{
int i;
A *a[2];
for(i=0;i<2;i++)
a[i]=new B[3];
A::numA();
B::numB();
for(i=0;i<2;i++)
delete []a[i];
delete []a;
A::numA();
B::numB();
}
執行結果是
A`s instance:6
B`s instance:6
A`s instance:0
B`s instance:6
查了版上的文章這樣釋放二維陣列的方式應該是對的
子類別的物件建立時,必先呼叫父類別的建構函數,再呼叫本身的建構函數。
子類別的物件執行結束時,必先呼叫本身的解構函數,再呼叫父類別的解構函數。
那請教一下我這樣做有把記憶體釋放乾淨嗎?
從板上文章所畫的記憶體分配應該是都有釋放掉
但是B的解構函式並沒有被執行到這樣是正常的嗎?
或者動態配置的記憶體都已被釋放所以根本沒關係?
還是我程式碼哪裡有誤或者哪裡重大觀念錯誤?
麻煩各位幫忙解惑~感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.116.69
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397063585.A.8C4.html
※ 編輯: Sunofgod (1.172.116.69), 04/10/2014 01:14:40
→
04/10 09:12, , 1F
04/10 09:12, 1F
→
04/10 10:26, , 2F
04/10 10:26, 2F
→
04/10 10:26, , 3F
04/10 10:26, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章