• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 编程开发 >> C/C++ >> 详细内容
 

推荐文章

 
 

热点文章

  • C++中文分词程序
  • 网址加密专家 源码
  • VC运行库版本不同导致链接.LIB静态库时发生重复定义问..
  • C++反汇编揭秘2 – VC编译器的运行时错误检查(RTC) - [..
  • C++反汇编揭秘2 – VC编译器的运行时错误检查(RTC)
  • C++反汇编揭秘1 一个简单的C++程序反汇编解析
  • C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3..
  • Warning C4150的原因和解决办法
 
 

相关文章

  • php取不到session的常见原因
  • PHP5中的时间相差八小时的解决办法
  • 用户喜欢你产品的原因
  • 手动生成C#的COM包装类的常见问题和解决办法
  • 百度只更新首页不更新内页的解决办法
  • 找不到指定文件xxx.xx 无法删除! 之快速解决办法
  • 服务器变慢的两种非常规解决办法
  • IE不解释VBSCRIPT的原因和解决办法
  • MySQL在服务器端出现ERROR 2002的解决办法
  • SQL Server中死锁的原因及解决办法
  • Sql Server全文搜索中文出错的问题解决办法
  • 网站不赚钱的四大原因
 
 

百度搜索

 
 

Warning C4150的原因和解决办法

  • 阅览次数:
  • 文章来源: http://blog.csdn.net/ATField/
  • 原文作者:
  • 整理日期: 2008-07-16
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

今天有同事碰到了这个Warning:

Warning C4150

Deletion of pointer to incomplete type 'type'; no destructor called

下面的代码会导致这个问题:

class A;

 

A *pA = new A();

delete pA;                  // Warning C4150

 

这个Warning字面的意思是由于类型是不完全类型(Incomplete Type),因此destructor不会被调用。

其原因是由于前面使用前置声明来声明class A,此时class A并没有完整的定义,编译器只是把A加入到符号表并标记A为一个class,编译器并不知道更多的信息,比如A的大小,有何成员函数等等。在以一般情况下,如果我们只用到A的指针,在特定平台下A的指针大小固定,因此编译器不会报任何错误。然而,在调用delete来删除pA的时候,编译器可以知道pA所指的内存大小,因为内存分配器在内存块中保存了大小信息,可以正确释放A所占据的内存。但是,由于A是Incomplete Type,编译器无法知道A所对应的析构函数(destructor),因此不会调用A的析构函数。

解决方法很简单,#include A所在的头文件即可,如果忘记了#include,则会出现此Warning。

当然了,还有一种情况是你已经在某个地方调用过A的析构函数了(这种情况不太常见),在这里只需要释放内存即可,所以可以这么写:

class A;

 

A *pA = new A();

delete (void *)pA;

上一篇:PHP使用zlib扩展实现页面GZIP压缩输出
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号