placement new用于重新初始化具有引用成员的对象

时间:2016-04-20 14:35:00

标签: c++

#include <new>

struct House { };
struct Room
{
  House& h;
  Room(House& h) : h(h) { }
};

int main()
{
   House h1;
   House h2;

   Room r(h1);

   //r = Room(h2); // This obviously won't work.

   ///
   r.~Room();
   new(&r) Room(h2); // This does work    
}

我在项目的一个地方使用过引用成员,我想知道使用这个技巧作为一种使用不同引用重新初始化对象的方法是安全的。

1 个答案:

答案 0 :(得分:0)

使用placement new是一种有效的做法。这是安全的,您的使用在语义上是正确的。但是,在没有特定情况的情况下,我无法回答您特定情况下的适用性问题。如果代码没有显示您的情况,那么在我听到更多内容之前,我愿意将其视为XY问题。