在成员函数中使用'delete this'后,我可以访问其他成员函数.为什么?

Vik*_*ngh 2 c++ linux oop this-pointer

我刚刚编写了一个示例程序来查看删除它的行为

class A
 {
   ~A() {cout << "In destructor \n ";}
 public: 
    int a;
    A() {cout << "In constructor \n ";}

    void fun()
     {
       cout << "In fun \n";
       delete this;
       cout << this->a << "\n"; // output is 0
       this->fun_2(); // how m able to call fun_2, if delete this is called first ??
     }

   void fun_2()
    {
      cout << "In fun_2 \n";
    }

main()
{
 A *ptr = new A;
 ptr->a = 100;
 ptr->fun(); //delete this will be executed here
 ptr->fun_2(); //how m able to execute fun_2 when this pointer is deleted ??
 cout<< ptr->a << "\n"; //prints 0
 return 0;
}

> Output
In constructor
In fun
In destructor
0
In fun 2
In fun 2
0
Run Code Online (Sandbox Code Playgroud)

问题

  1. 在fun()中执行删除后,如何在fun()中使用此指针访问func_2()?
  2. 现在主要是我如何能够做obj-> fun_2,因为这个指针被删除了?
  3. 如果我在杀死这个对象后能够访问函数成员,那么为什么数据成员将为零'0'?

使用linux ubuntu和g ++编译器

das*_*ght 9

  1. 你看到的是未定义的行为:它可能会起作用,或者它可能会崩溃.
  2. 指针指向已删除的实例 - 它是一个悬空指针.
  3. 这也是一个未定义的行为:您可能会看到零或垃圾值.

埃里克利珀提供了一个非常漂亮的"一书在酒店房间的桌子的抽屉"中的比喻他的回答一个有关指针的局部变量的函数返回之后的问题,它是在这里同样适用.