| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 753 人关注过本帖
标题:一道类的面试题目求解。
只看楼主 加入收藏
LSH744
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-15
收藏
 问题点数:0 回复次数:4 
一道类的面试题目求解。
//下面的代码有什么问题,为什么,请说明原因

class A
{
public:
  A() { p=this; }
  ~A()
  {
      if(p!=NULL)
      {
          delete p; p=NULL;
      }
  }
  A* p;
};
搜索更多相关主题的帖子: 求解 面试 
2008-11-28 23:07
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
没有 new 指针
2008-11-28 23:18
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
首先,如2L所说,删除指针的工作应该由在他的作用域内完成。即new和delete配对
但是这个并不是错误的,只是不提倡这样做
真正的错误在于,在构造函数中,你的成员变量P=this,也就是说p是一个指向自己的指针
delete p就等于删除自己
析构函数本来就是在删除自己的时候调用的
也就是说,你在删除自己的同时又删除了一遍自己……
譬如
A tempA(A* anotherAobject);
delete tempA;
这个时候,在析构函数中又调用了一次delete p;
实际上p 是完全等价于 tempA的。。
2008-11-29 02:39
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
收藏
得分:0 
以下是引用beyondlwm在2008-11-29 02:39的发言:

首先,如2L所说,删除指针的工作应该由在他的作用域内完成。即new和delete配对
但是这个并不是错误的,只是不提倡这样做
真正的错误在于,在构造函数中,你的成员变量P=this,也就是说p是一个指向自己的指针
delet ...


楼上讲的很有道理啊,不过还有点不明白的地方请教下:在A类对象被销毁的时候会自动调用析构函数,那么其实A类本身可以不需要定义析构函数的,它会自动调用默认的析构函数去销毁对象,这么说对吗?

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-29 14:21
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
可以不定义析构函数
系统会自动调用默认的析构函数
但是这个析构函数是什么都不做的。
也就是说,new出来的对象所占用的空间实际上还是需要手动来释放
2008-12-01 11:33
快速回复:一道类的面试题目求解。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024786 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved