コード :
#include<iostream>
using namespace std;
class A{
public:
A(){cout << "A() Constructor " << endl;
throw 1;
}
};
int main(){
A* p=0;
cout << p << endl; // p value is 0
try{
p=new A(); // object is not fully constructed, no address is returned to p. for future deallocation
}
catch(...){cout << "Exception" << endl;}
cout << p << endl; // this will output that p has the value 0,proof that no address was returned to p.
}
メモリがヒープ内のオブジェクトに割り当てられ、メモリのアドレスがコンストラクターに渡されますが、コンストラクターの場合throw 1;
、型のオブジェクトはA
完全に構築されたオブジェクトとは見なされません。したがって、ポインター p にはポインターは返されません。何か間違ったことを理解した場合は、遠慮なく修正してください。
質問:
1)したがって、私の質問は、そのような場合に A オブジェクトのメモリの割り当てを解除する方法です。私はデストラクタ呼び出しについて話しているのではなく、メモリの割り当て解除について話しています。
2)A
関数内の型のローカル オブジェクトを作成するとどうなりますかmain
。明らかに、完全に構築されることもありません。このオブジェクトはいつ割り当て解除されますか (もちろん、完全に構築されたサブオブジェクトのデストラクタを呼び出した後)。