一直不懂这种写法的问题在哪里?求大神。

niceguy01 2013-03-21 01:14:49

class A
{
public:
A()
{
p=this;
}
~A()
{
if(p!=NULL)
{
delete p; p=NULL;
}
}

A* p;
};
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
雁声留 2013-03-26
  • 打赏
  • 举报
回复
错误原因只要明白一点就好了:执行析构函数~A()时 会 delete p , delete p的时候相当于delete this, delete this 时会调用析构函数~A() .......,死循环!!!!!
niceguy01 2013-03-26
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代……
无语了对你啊
zrdongjiao 2013-03-21
  • 打赏
  • 举报
回复
引用 7 楼 ForestDB 的回复:
C/C++ code?1234567891011121314151617class A { public: A() { p=this; } ~A() { if(p!=this) // this应该由delete销毁 { delete p; p=NULL; } } A* p; };……
递归?
ForestDB 2013-03-21
  • 打赏
  • 举报
回复
class A 
{ 
public: 
  A()
  { 
      p=this; 
  } 
  ~A() 
  { 
      if(p!=this) // this应该由delete销毁
      { 
          delete p; p=NULL; 
      }
  } 
 
  A* p; 
};
太绕了。
佑勿勿 2013-03-21
  • 打赏
  • 举报
回复
引用 4 楼 jiandingzhe 的回复:
你为什么要包含指向自己的指针?这样做很少有实际用途。
做链表嘛。。。。
引用 1 楼 dingqiang107 的回复:
delete 会调用A的析构函数,造成循环调用。 可以先把p置成NULL,然后delete this。不过这种用法太容易出错了。
++
赵4老师 2013-03-21
  • 打赏
  • 举报
回复
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
jiandingzhe 2013-03-21
  • 打赏
  • 举报
回复
你为什么要包含指向自己的指针?这样做很少有实际用途。
starytx 2013-03-21
  • 打赏
  • 举报
回复
感觉有些多此一举吧,析构会自动释放对象的,不用显示delete
niceguy01 2013-03-21
  • 打赏
  • 举报
回复
引用 1 楼 dingqiang107 的回复:
delete 会调用A的析构函数,造成循环调用。 可以先把p置成NULL,然后delete this。不过这种用法太容易出错了。
没明白
dingqiang107 2013-03-21
  • 打赏
  • 举报
回复
delete 会调用A的析构函数,造成循环调用。 可以先把p置成NULL,然后delete this。不过这种用法太容易出错了。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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