可能重复:
我能否在 C++ 中重新开始而不会再次失败?
考虑T* o = new(T())
,其中 T 定义了一个复制构造函数。还假设表达式new
使用默认值::operator new()
为了重新使用分配给 o 的内存,而不是用 删除对象delete o
,标准是否允许以下顺序:
o->~T()
显式调用- 使用placement new 在先前为o 分配的内存上创建对象的副本:new(o) T(x)
- 完成 o 及其内存后,使用
delete o
我也问这个,因为我不明白为什么std::map<T, V>
(或其operator[]
具体),例如,如果上面的序列可以在没有这个要求的情况下工作,那么需要 T 定义一个适当的赋值运算符。我怀疑 map 是这样设计operator=()
的,只是因为复制构造函数可以具有不同的语义,因为大多数时候它们只是以相同的方式实现。