I just wrote a sample program to see the behaviour of delete this
class A
{
~A() {cout << "In destructor
";}
public:
int a;
A() {cout << "In constructor
";}
void fun()
{
cout << "In fun
";
delete this;
cout << this->a << "
"; // 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
";
}
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 << "
"; //prints 0
return 0;
}
> Output
In constructor
In fun
In destructor
0
In fun 2
In fun 2
0
Questions
- After executing delete this in fun(), how I am able to access func_2() with this pointer in fun() ??
- Now in main how I am able to do obj->fun_2 as this pointer is deleted ??
- If I am able to access function members after killing this object, then why data members are comming zero '0' ??
m using linux ubuntu and g++ compiler
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…