首页 > 代码库 > C++基类一定要写虚函数!!!
C++基类一定要写虚函数!!!
这是个提醒,算是吧!
如果详细原理过程,可能会有一个大篇幅。但这里不想多加赘述,只说说它的破坏力!
最近写了个图像处理框架,要做个基类来handle众多子类,写之前一直申称:要注意内存管理,写好析构函数。
谁知最后还是偏偏忘记了将基类析构函数virtual化,结果在操控基类释放内存的一段程序中,发现基类释放了,但attach到他上面的子类对象keep住没能free。
结果程序在集群上跑了几天,终于挂彩了。。。查了半天,终于发现base class的析构函数忘了加virtual,导致自己析构ok,但是指针却无法找到子类析构函数,跑去xx了。
泪奔啊!
血的教训,各位珍重,这低级错误愿君勿犯!
erro wrotten:
class baseA{
~baseA();
//or you use default destructor
}
class B:baseA{
B();
~B();
}
//use
baseA *p= xxxxxxx;
//delete
delete p;//Here it can call ~baseA(),but B‘s destructor func cant find and call.
//B is still in your mem.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。