重新调用静态分配的对象的构造函数

时间:2014-10-31 17:20:04

标签: c++

我有一个静态分配的对象。该对象没有operator=,我需要重建它。

所以,对我有用:

myObj = T(...);

我目前的做法是:

myObj.~T()
new(&myObj) T(...);

但感觉不对,所以我想知道我在这里是否有任何陷阱。

2 个答案:

答案 0 :(得分:1)

如果某个对象是静态分配的,并且您想要在不诉诸UB的情况下重新分配它,那么最好的办法是控制范围并决定

  1. 到最晚时,您可以等到应该分配对象
  2. 最早应该释放物品
  3. 为了更好地理解它,让我们考虑一个例子

    void foo()
    {
        {
        Foo obj(...); // obj gets allocated
        // Code which uses obj
        } // obj gets automatically de-allocated
        {
        Foo obj; // obj gets allocated (default constructed)
        // Code which uses obj
        } // obj gets automatically de-allocated
    }
    

答案 1 :(得分:1)

将对象创建为std::experimental::optional,您现在可以随意重新创建它。只要记住每次使用它之前确保它存在。

boost也有这样的课程,根据我的经验,你也可以自己选择。