大众信息网

c++ 中 为什么要将析构函数设置成虚函数?

关注:265  答案:3  手机版
解决时间 2021-05-15 22:34
c++ 中 为什么要将析构函数设置成虚函数?
最佳答案
写成虚的是为了在实现多态的时候不造成内存泄露, 比如:
class a
{
int aa;
public:
virtual ~a(){};
};
class b : public a
{
int bb;
};
如果你这样:
a *pa = new b; // upcast
然后这样:
delete pa;
这句delete, 如果你基类的析构函数不是虚的的话, 就会造成内存泄露, 具体表现为派生类的内存被释放了而基类没有.
全部回答
delete pa;如果不是虚函数的话,将调用定义pa时类型的析构函数,pa是a类型指针所以只会调用基类的析构,所以楼上的最后一句话正好相反“具体表现为派生类的内存被释放了而基类没有. ”
有这回事?? 好久没编程了 忘了 不过好像没这事吧
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!