搜索
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 一道类的面试题目求解。
标题:
一道类的面试题目求解。
只看楼主
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
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-246818-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.221294 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved