C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 类型化无效指针指向对象时未调用析构函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
样品

void func(void* data)
{
 Cresource* resource = (Cresource*)data;
 delete resource; // ~Cresource never called.
 resource = NULL;
}

请帮我弄明白这一点.

解决方法

总结了可能无法调用Cresource析构函数的原因,从其他答案中提取

不完整的类型

一个可能的原因是您只声明了Cresource类型,未定义:

class Cresource;

void func(void* data)
{
 Cresource* resource = (Cresource*)data;
 delete resource; // ~Cresource never called.
 resource = NULL;
}

这是一个未定义的行为(删除不完整的类型).在这样的情况下,编译器应该发出关于未调用析构函数的警告(Visual C肯定会发出它).如果是这种情况,请确保在要销毁它的位置定义了类型(包括所需的标题).

空指针

如果data为NULL,则delete不执行任何操作,也不会调用任何析构函数.

类型不匹配

如果Cresource析构函数是虚拟的,并且存储在数据指向的内存中的对象实际上是不同的类型,则会得到未定义的行为.通常会调用不同的析构函数(如果对象具有另一个虚拟析构函数),在其他情况下程序可能会崩溃(如果对象没有虚拟析构函数).

@H_301_41@

大佬总结

以上是大佬教程为你收集整理的c – 类型化无效指针指向对象时未调用析构函数全部内容,希望文章能够帮你解决c – 类型化无效指针指向对象时未调用析构函数所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。