我有下面的代碼,正如我所知,在一個使用類構造函數的程序結束時,如果創建了某些對象,它們就會被銷燬。由此判斷,在執行結束時,我應該有一些「〜B()」和「〜D()」以特定的順序打印出來,但是當我運行代碼時,並沒有發生這種情況。爲什麼?構造函數和析構函數
#include<iostream>
#include<stdlib.h>
using namespace std;
class B{
public:
B(){cout<<"B()";}
virtual void print(){cout<<"b";}
~B(){cout<<"~B()";}
};
class D:public B{
public:
D(){cout<<"D()";}
void print(){B::print()
;cout<<"d";}
~D(){cout<<"~D()";}
};
void testI(){
B* b[]={new B(),new D()};
b[1]->print();
B&c=*b[1];
c.print();
}
int main(){
testI();
return 0;
}
'delete'(和'B'需要'virtual'析構函數)在哪裏? – hmjd
因爲您使用'new'創建對象而不是調用'delete'。嘗試'int main(){B b; }' – juanchopanza