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

时间:2012-02-06 04:55:01

标签: c++ object-lifetime

  

可能重复:
  Can I get a fresh start in C++ without failing again?

考虑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
  4. 删除它

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

0 个答案:

没有答案