次のコードでは、コンストラクタとデストラクタをプライベートにし、独自のインスタンス化および削除関数を作成しました。しかし、Delete()
関数を呼び出すと、そのdelete this
中のステートメントはオブジェクトを削除しているように見えますが、コンパイラーに通知していないため、オブジェクトはまだ存在していると見なされます。ポインタをnullまたはゼロに設定するのは良い考えだと思ったのでthis = 0
、deleteステートメントの前にaを付けましたが、まったく機能しませんでした。Delete()
オブジェクトとそのポインタを完全に削除するには、関数内に何を入れる必要がありますか?
class MyClass
{
private:
MyClass() {}
~MyClass() {}
public:
static MyClass *Instantiate()
{
MyClass *inst = new MyClass;
return inst;
}
void Delete()
{
delete this;
}
};
int main()
{
MyClass *inst1 = MyClass::Instantiate();
inst1->Delete();
return 0;
}