これを削除する動作を確認するためのサンプルプログラムを作成しました
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
質問
- fun()でdelete thisを実行した後、fun()でこのポインタを使用してfunc_2()にアクセスするにはどうすればよいですか?
- 主に、このポインタが削除されたときにobj->fun_2を実行する方法は??
- このオブジェクトを強制終了した後に関数メンバーにアクセスできる場合、データメンバーがゼロ「0」になっているのはなぜですか?
Linuxubuntuとg++コンパイラを使用するm