如果你做"删除这个"会发生什么?在会员功能?

zha*_*nwu 19 c++

如果成员函数尝试执行操作会发生什么delete this;,例如在以下类的构造函数中?

class A
{
public:
    A(int);
    ~A();
    int *pi;
}

A::A(int i)
{
    delete this;
    pi = new int(i);
}

A::~A()
{
    delete pi;
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 38

这个 C++ FAQ条目很好地回答了这个问题,在这里重复:

只要你小心,对象就可以了delete this.

这是我如何定义"小心":

  • 你必须绝对100%肯定这个对象是通过new(不是new [],也不是通过放置new,也不是堆栈上的本地对象,也不是全局,也不是​​另一个对象的成员;但是通过普通的普通新).
  • 您必须绝对100%肯定您的成员函数将是在此对象上调用的最后一个成员函数.
  • 您必须绝对100%确定您的其他成员函数(在删除此行之后)不会触及此对象的任何部分(包括调用任何其他成员函数或触摸任何数据成员).
  • 你必须绝对100%肯定在删除此行后没有人甚至触及this指针本身.换句话说,你不能检查它,将它与另一个指针进行比较,将它与NULL进行比较,打印它,投射它,用它做任何事情.

您通过访问后违反了#3pidelete this