我有一个静态分配的对象。该对象没有operator=
,我需要重建它。
所以,不对我有用:
myObj = T(...);
我目前的做法是:
myObj.~T()
new(&myObj) T(...);
但感觉不对,所以我想知道我在这里是否有任何陷阱。
答案 0 :(得分:1)
如果某个对象是静态分配的,并且您想要在不诉诸UB的情况下重新分配它,那么最好的办法是控制范围并决定
为了更好地理解它,让我们考虑一个例子
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
也有这样的课程,根据我的经验,你也可以自己选择。