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