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

Reinvoking the constructor of a statically allocated object

本文关键字:分配 对象 构造函数 静态 新调用 调用      更新时间:2023-10-16

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

因此,这对我来说是不起作用的:

myObj = T(...);

我目前的做法是:

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

但这感觉不对,所以我想知道这里是否有我错过的陷阱。

如果对象是静态分配的,并且您希望在不使用UB的情况下重新分配它,那么最好的选择是控制范围并决定

  1. 最晚什么时候可以等到应该分配对象
  2. 你最早应该在什么时候释放这个物体

为了更好地理解它,让我们考虑一个的例子

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
}

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

boost也有这样一个类,根据我的经验,你也可以滚动自己的可选类。