c – 执行“删除此 *** 作”时缺少虚拟析构函数

c – 执行“删除此 *** 作”时缺少虚拟析构函数,第1张

概述第 16.15 of the C++ FAQ Lite节讨论删除它然后提到: 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 I 第 16.15 of the C++ FAQ Lite节讨论删除它然后提到:

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 – 执行“删除此 *** 作”时缺少虚拟析构函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存