请教各位高手:C++中为什么析构函数一般定义成虚函数啊?急!!!!

iter_zc 2004-11-04 10:42:12
各位高手,请帮小弟解决一个小问题吧!C++中为什么析构函数一般定义成虚函数啊?急!!!!
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iter_zc 2004-11-05
  • 打赏
  • 举报
回复
谢谢各位了,小弟明白了
dudu妈 2004-11-05
  • 打赏
  • 举报
回复
因为一般c++类都要通过继承或者派生,怕有时忘记所以一般都定义成虚的!如果是个单独的类也不会出现问题,为了方便期间建议都用!
ice_bin 2004-11-05
  • 打赏
  • 举报
回复
说的各有道理```
Hmilzy 2004-11-05
  • 打赏
  • 举报
回复
个人见解:

派生类中一般都定义了新的对象或数据成员,如果仅仅调用基类的析构函数,那么,新申请的对象和数据就得不到回收,从而造成内存泄露.

所以,析构函数一般定义成虚函数~!让派生类实现自己的析构函数.
hchinside 2004-11-05
  • 打赏
  • 举报
回复
如果你的类位于继承体系中,作为父类,那就要把dtor声明为virtual,否则不用。
eg:
class B
{
virtual ~B() {}
}
class D : public B
{
virtual ~D() {}
}

B* p = new D();
delete p; // 虽然p是B类型,但是这里会调用~D,由~D内部调用~B
如果dtor不是virtual,那delete p只会直接调用~B
sjzxyg 2004-11-05
  • 打赏
  • 举报
回复
防止资源和内存泄露,否则你delete基类指针,则执行的是基类的析构,而不是实际的析构函数,所以需要继承的类的析构函数设计为虚函数
geland 2004-11-05
  • 打赏
  • 举报
回复
以便于派生出新类

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧