[問題] delete 二維陣列與類別建構解構函式

看板C_and_CPP (C/C++)作者 ( )時間12年前 (2014/04/10 01:13), 12年前編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
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
Destructor前面都加上virtual試試吧
04/10 09:12, 1F

04/10 10:26, , 2F
感謝您~果然在"~A"前面掛上virtual就好了 原來這也要動態
04/10 10:26, 2F

04/10 10:26, , 3F
繫結 想都沒想過....謝謝
04/10 10:26, 3F
文章代碼(AID): #1JHN-XZ4 (C_and_CPP)
文章代碼(AID): #1JHN-XZ4 (C_and_CPP)