myClass obj= *(new myClass());
これにより、最初にmyClass
という名前の自動保存期間を持つオブジェクトが作成されobj
ます。このオブジェクトは式 によって初期化されます*(new myClass())
。この式は、オブジェクトを動的に割り当ててmyClass
から、そのオブジェクトへのポインターを逆参照します。したがって、ここで最終的に行うことは、オブジェクトを動的に割り当ててから、それを にコピーすることobj
です。
動的に割り当てられたオブジェクトを追跡できなくなりました。それは良いことではありません。実行delete &obj;
すると、自動オブジェクトのアドレスのみが取得され、それが破棄されますがdelete
、動的に割り当てられたオブジェクトでのみ使用する必要があります。
あなたは参照になるように変更することができobj
、それはうまくいくでしょう:
myClass& obj = *(new myClass());
これにより、動的に割り当てられたオブジェクトがコピーされないようになります。ただし、これは良い考えではありません。がdobj
でなければならないオブジェクトを参照しているという事実を隠します。delete
代わりに、ポインター自体を保存することをお勧めします。
myClass* obj = new myClass();
// ...
delete obj;
またはさらに良いのは、 のようなスマート ポインターを使用することstd::unique_ptr<myClass>
です。
またはさらに良いことに、両方とも動的に割り当てないでください。自動オブジェクトを使用するだけです:
myClass obj;
// No need to allocate or delete anything