を考えてみましょうT* o = new(T())
。ここで、T にはコピー コンストラクターが定義されています。また、式new
がデフォルトを使用するとします。::operator new()
でオブジェクトを削除する代わりに、o に割り当てられたメモリを再利用するためにdelete o
、標準では次のシーケンスが許可 されていますか?
o->~T()
明示的に呼び出す- 以前に o に割り当てられたメモリ上にオブジェクトのコピーを作成するには、placement new を使用します: new(o) T(x)
- o とその記憶が終わったら、
delete o
たとえば、上記のシーケンスがこの要件なしで機能する場合、T に適切な代入演算子を定義する必要がある理由std::map<T, V>
(または具体的に)がわからないため、これも尋ねます。ほとんどの場合、同じように実装されているoperator[]
ため、コピーコンストラクターが異なるセマンティクスを持つ可能性があるという理由だけで、マップがこのように設計されているとは思えません。operator=()