8

可能重复:
我能否在 C++ 中重新开始而不会再次失败?

考虑T* o = new(T()),其中 T 定义了一个复制构造函数。还假设表达式new使用默认值::operator new()

为了重新使用分配给 o 的内存,而不是用 删除对象delete o,标准是否允许以下​​顺序: 

  1. o->~T()显式调用
  2. 使用placement new 在先前为o 分配的内存上创建对象的副本:new(o) T(x)
  3. 完成 o 及其内存后,使用delete o

我也问这个,因为我不明白为什么std::map<T, V>(或其operator[]具体),例如,如果上面的序列可以在没有这个要求的情况下工作,那么需要 T 定义一个适当的赋值运算符。我怀疑 map 是这样设计operator=()的,只是因为复制构造函数可以具有不同的语义,因为大多数时候它们只是以相同的方式实现。

4

0 回答 0