类成员函数删除类自身

周晓荣 2013-02-27 11:36:45

class A
{
public:
A(){};
~A(){};

void DelelteMyself();
};

void A::DelelteMyself()
{
delete this;
}

A *pA = new A();
pA->DelelteMyself();


这会发生什么异常么?
...全文
551 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
就是那个党伟 2013-04-28
  • 打赏
  • 举报
回复
14楼正解。 目测,this以后不用,但那片地址还在吧
lm_whales 2013-04-27
  • 打赏
  • 举报
回复
那么这会发生什么情况, 运行出错呗! 如果需要解决这种情况,自己另外设法保证,你的代码是多线程安全的; MFC类库是不提供这种保证的,不知其他库提不提供。
  • 打赏
  • 举报
回复
引用 9 楼 et214721856 的回复:
[quote=引用 1 楼 supermegaboy 的回复:] 不一定,得视后续代码而定
假如在多线程环境下,A *pA = new A(); pA指针是多线程共享的,如果线程1此时正在调用类A的一个成员函数,还没调用结束时 线程2得到执行时间,调用了pA->DeleteMyself将自己删除了 那么这会发生什么情况[/quote] 多线程下使用,最好就用智能指针了。 单看你这个代码,是没有问题的。 但是如果有其它访问该指针的语句,就会dump
赵4老师 2013-04-27
  • 打赏
  • 举报
回复
多线程互操作同一个类实例不加锁恐怕不行吧。
赵4老师 2013-04-27
  • 打赏
  • 举报
回复
多线程互操作同一个类示例不加锁恐怕不行吧。
飞天御剑流 2013-03-01
  • 打赏
  • 举报
回复
在thread 2删除该A对象后,thread .1正在运行的成员函数不应再显式或隐式地使用this,包括调用其它成员函数或者访问成员子对象,其它会引起编译器运行合成成员函数的操作也不能使用,当然也不能在this上进行placement new。否则就属于未定义行为,后果无法预料。
飞天御剑流 2013-03-01
  • 打赏
  • 举报
回复
在thread 2删除该A对象后,thread .1正在运行的成员函数不应再显式或隐式地使用this,包括调用其它成员函数或者访问成员子对象,其它会引起编译器运行合成成员函数的操作也不能使用,当然也不能在this上进行placement new。否则就属于未定义行为,后果无法预料。
周晓荣 2013-03-01
  • 打赏
  • 举报
回复
引用 1 楼 supermegaboy 的回复:
不一定,得视后续代码而定
假如在多线程环境下,A *pA = new A(); pA指针是多线程共享的,如果线程1此时正在调用类A的一个成员函数,还没调用结束时 线程2得到执行时间,调用了pA->DeleteMyself将自己删除了 那么这会发生什么情况
derekrose 2013-02-27
  • 打赏
  • 举报
回复
我也有疑问,如果在栈上申请内存的时候不会有异常吗?
Coder_Y_Jao 2013-02-27
  • 打赏
  • 举报
回复
最好禁用栈上创建
xjpzy 2013-02-27
  • 打赏
  • 举报
回复
只要后面不涉及到this指针的内容就没问题
  • 打赏
  • 举报
回复
lz提供的代码是没有问题的
梦之安魂曲 2013-02-27
  • 打赏
  • 举报
回复
如果是根据引用计数删除自身,如COM技术。这种方式用得多。
chuachua66 2013-02-27
  • 打赏
  • 举报
回复
木有,经常在postncdestory里这么干。
飞天御剑流 2013-02-27
  • 打赏
  • 举报
回复
不一定,得视后续代码而定

64,644

社区成员

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

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