オブジェクトを使用し続ける必要がないように->
、代わりにオブジェクトを直接操作するには、次のことを実行することをお勧めします。
obj x = *(new obj(...));
...
delete &obj;
オブジェクトを使用し続ける必要がないように->
、代わりにオブジェクトを直接操作するには、次のことを実行することをお勧めします。
obj x = *(new obj(...));
...
delete &obj;
これは単なる悪い習慣ではありませんが、次のようになります。
obj
を格納し、によって返されたそのオブジェクトへのポインターが失われるため、メモリ リーク (提供したコードからは見えないパターンを使用している場合を除く) 。new
new
delete
です。これは、で割り当てられていないオブジェクトへのポインターに渡しているためですnew
。C++11 標準のパラグラフ 5.3.5/2 によると:[...] 最初の選択肢 (オブジェクトの削除) では、delete のオペランドの値は、ヌル ポインター値、前のnew-expressionによって作成された非配列オブジェクトへのポインター、またはサブオブジェクトへのポインターである可能性があります。 (1.8) そのようなオブジェクトの基本クラスを表す (第 10 節)。そうでない場合、動作は undefinedです。
いいえ、実際、これはリークにつながります。x
はcopy initializedであるため、 が指す元のオブジェクトnew obj
は失われます。
使うだけ
obj x(...);
動的割り当ては必要ありません。または
obj x = obj(...);
あなたがしなければならない場合(それを疑う)。