不死类,delete删除类

SurvivorLee 2011-01-26 02:42:14
class Undead
{

public:
void Hey() {printf("Hey");}
int iMemPara;
};


void main()
{
Undead* myUndead = new Undead();
delete myUndead;
myUndead = NULL;
myUndead->Hey(); //在运行到此处时,没有报错.
myUndead->iMemPara = 0;//运行到此处报异常错误.
}




为神马这么报错啊???

谢!!!
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhai_lee 2011-01-26
  • 打赏
  • 举报
回复
delete会调用对象的析构函数,并进行清理与释放内存的工作。delete后,myUndead虽是类Undead的对象,但没有相关的内存空间,所以不能对其成员变量进行操作。对类的的成员函数进行操作没报错,是因为类的成员函数是全局的存在;而成员变量依赖于类对象存在。
llllllllllllleon 2011-01-26
  • 打赏
  • 举报
回复
+[Quote=引用 1 楼 barech 的回复:]
类的成员函数是全局的存在;而成员变量依赖于类的对象存在。

因此编译器编译并链接后,在调用 myUndead->Hey()的地方,将转换为Hey()对应的函数地址。

而针对具体成员变量的操作则是在运行期间操作的。

因此会出现上面的报错问题。

over。
[/Quote]
机智的呆呆 2011-01-26
  • 打赏
  • 举报
回复
fc_cpp 2011-01-26
  • 打赏
  • 举报
回复
类的成员函数最终都被当做全局函数来处理!
pengzhixi 2011-01-26
  • 打赏
  • 举报
回复
因为你的Hey()函数并未使用类的数据成员,所以就当是运行一个普通函数一样
barech 2011-01-26
  • 打赏
  • 举报
回复
类的成员函数是全局的存在;而成员变量依赖于类的对象存在。

因此编译器编译并链接后,在调用 myUndead->Hey()的地方,将转换为Hey()对应的函数地址。

而针对具体成员变量的操作则是在运行期间操作的。

因此会出现上面的报错问题。

over。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧