大佬教程收集整理的这篇文章主要介绍了c – 类型化无效指针指向对象时未调用析构函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void func(void* data) { Cresource* resource = (Cresource*)data; delete resource; // ~Cresource never called. resource = NULL; }
请帮我弄明白这一点.
不完整的类型
class Cresource; void func(void* data) { Cresource* resource = (Cresource*)data; delete resource; // ~Cresource never called. resource = NULL; }
这是一个未定义的行为(删除不完整的类型).在这样的情况下,编译器应该发出关于未调用析构函数的警告(Visual C肯定会发出它).如果是这种情况,请确保在要销毁它的位置定义了类型(包括所需的标题).
空指针
如果data为NULL,则delete不执行任何操作,也不会调用任何析构函数.
类型不匹配
如果Cresource析构函数是虚拟的,并且存储在数据指向的内存中的对象实际上是不同的类型,则会得到未定义的行为.通常会调用不同的析构函数(如果对象具有另一个虚拟析构函数),在其他情况下程序可能会崩溃(如果对象没有虚拟析构函数).
以上是大佬教程为你收集整理的c – 类型化无效指针指向对象时未调用析构函数全部内容,希望文章能够帮你解决c – 类型化无效指针指向对象时未调用析构函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。