8

重複の可能性:
C++ で再び失敗することなく新たなスタートを切ることはできますか?

を考えてみましょうT* o = new(T())。ここで、T にはコピー コンストラクターが定義されています。また、式newがデフォルトを使用するとします。::operator new()

でオブジェクトを削除する代わりに、o に割り当てられたメモリを再利用するためにdelete o、標準では次のシーケンスが許可 されていますか?

  1. o->~T()明示的に呼び出す
  2. 以前に o に割り当てられたメモリ上にオブジェクトのコピーを作成するには、placement new を使用します: new(o) T(x)
  3. o とその記憶が終わったら、delete o

たとえば、上記のシーケンスがこの要件なしで機能する場合、T に適切な代入演算子を定義する必要がある理由std::map<T, V>(または具体的に)がわからないため、これも尋ねます。ほとんどの場合、同じように実装されているoperator[]ため、コピーコンストラクターが異なるセマンティクスを持つ可能性があるという理由だけで、マップがこのように設計されているとは思えません。operator=()

4

0 に答える 0