我有下面的代码,正如我所知,在一个使用类构造函数的程序结束时,如果创建了某些对象,它们就会被销毁。由此判断,在执行结束时,我应该有一些“〜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