类中含有类本身的指针,构造函数和析构函数怎么写?

qinken547 2013-05-28 07:48:27
今天看到一个找错题如下

#include <iostream>
using namespace std;
class A
{
public:
A()
{
p = this;
}
~A()
{
if (p!=NULL)
{
delete p;
p = NULL;
}
}
private:
A *p;
};

int main()
{
A a;
return 0;
}

我当时回答了没有给p分配内存,后来运行程序觉得应该是析构函数陷入了死循环。
另外就是如果真要给p分配内存应该怎么分配?
...全文
313 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaodiandian 2013-08-22
  • 打赏
  • 举报
回复
1. delete 要跟 new 操作对应, 所以, private 里, 若改为: A *p=new A;
  • 打赏
  • 举报
回复
p指针不是new出来的 ,随意用delete会有 Stack overflow错误(此题就是错这) 这里p的类型是A本身 ,不可以分配内存吧~~~
hugett 2013-05-29
  • 打赏
  • 举报
回复
的确会死循环。。
hhzjzpp 2013-05-29
  • 打赏
  • 举报
回复
还有这样的类,我没写过。
坏蛋lk 2013-05-28
  • 打赏
  • 举报
回复
楼主可加在析构函数加 cout<<this<<endl;看看 确实是死循环
walker沃克 2013-05-28
  • 打赏
  • 举报
回复
”p分配内存“你的意思是在调用构造函数的时候对象还没有分配空间吗,事实上在调用构造函数的时候,对象的空间已经分配,构造函数的调用只是为了初始化对象的成员(当然还有在编译器层面上对构造函数函数的扩充)
漫步者、 2013-05-28
  • 打赏
  • 举报
回复
delete ->相对于new来说的,你这样容易造成未定义的结果
Jncryang 2013-05-28
  • 打赏
  • 举报
回复
析构的时候根本没必要去delete p, 因为你的p 并不是new出来的。如果你把A *p 换成char *p来看,就明白了。 #include <iostream> using namespace std; class A { public: A() { p = ‘a’; } ~A() { if (p!=NULL) { //怎么办?难道char *p也到delete? } } private: char *p; }; int main() { A a; return 0; }

64,645

社区成员

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

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