是否可以通过这种方式销毁和重新创建对象?

Mar*_*tin 7 c++ object-lifetime

可能重复:
我可以在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定义一个适当的赋值运算符.我怀疑地图是以这种方式设计的,因为operator=()复制构造函数可以有不同的语义,因为大多数时候它们只是以相同的方式实现.