|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 一道类的面试题目求解。
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
753
人关注过本帖
标题:
一道类的面试题目求解。
只看楼主
加入收藏
LSH744
等 级:
新手上路
帖 子: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
等 级:
新手上路
威 望:
3
帖 子:542
专家分:0
注 册:2008-1-4
第
2
楼
收藏
得分:0
没有 new 指针
2008-11-28 23:18
举报帖子
使用道具
赠送鲜花
beyondlwm
等 级:
新手上路
帖 子:98
专家分:0
注 册:2006-7-19
第
3
楼
收藏
得分: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
等 级:
新手上路
威 望:
1
帖 子:124
专家分:0
注 册:2008-10-28
第
4
楼
收藏
得分:0
以下是引用
beyondlwm
在2008-11-29 02:39的发言:
首先,如2L所说,删除指针的工作应该由在他的作用域内完成。即new和delete配对
但是这个并不是错误的,只是不提倡这样做
真正的错误在于,在构造函数中,你的成员变量P=this,也就是说p是一个指向自己的指针
delet ...
楼上讲的很有道理啊,不过还有点不明白的地方请教下:在A类对象被销毁的时候会自动调用析构函数,那么其实A类本身可以不需要定义析构函数的,它会自动调用默认的析构函数去销毁对象,这么说对吗?
不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-29 14:21
举报帖子
使用道具
赠送鲜花
beyondlwm
等 级:
新手上路
帖 子:98
专家分:0
注 册:2006-7-19
第
5
楼
收藏
得分:0
可以不定义析构函数
系统会自动调用默认的析构函数
但是这个析构函数是什么都不做的。
也就是说,new出来的对象所占用的空间实际上还是需要手动来释放
2008-12-01 11:33
举报帖子
使用道具
赠送鲜花
5
1/1页
1
快速回复:
一道类的面试题目求解。
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.055316 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved