Naturally the usual caveats apply in cases where your this pointer is
a pointer to a base class when you don’t have a virtual destructor.
为什么这是真的?考虑以下代码:
class ISuicIDal {public: virtual voID suicIDe() = 0;};class MyKlass : public ISuicIDal {public: MyKlass() { cerr << "MyKlass constructor\n"; } ~MyKlass() { cerr << "MyKlass destructor\n"; } voID suicIDe() { delete this; }};
因此使用:
int main(){ ISuicIDal* p = new MyKlass; p->suicIDe(); return 0;}
在调用p-> suicIDe()中,MyKlass的析构函数按预期调用,即使ISuicIDal没有虚拟析构函数.
对我来说这是有道理的,因为在MyKlass :: suicIDe中,已知它的静态类型是MyKlass *,因此调用了正确的析构函数.通过将typeID调用置于自杀状态,可以轻松验证这一点.
那么FAQ条目不准确,还是我误解了?
解决方法 你是误解.在ISuicIDal中实现自杀函数(即删除它),你会发现当this指针是一个调用delete的基类时,它不会调用派生类的析构函数. 总结以上是内存溢出为你收集整理的c – 执行“删除此 *** 作”时缺少虚拟析构函数全部内容,希望文章能够帮你解决c – 执行“删除此 *** 作”时缺少虚拟析构函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)