我有一个静态分配的对象。此对象没有operator=
,我需要重建它。重新调用静态分配对象的构造函数
所以,这确实不为我工作:
myObj = T(...);
我目前的做法是:
myObj.~T()
new(&myObj) T(...);
但感觉错了,所以我想知道是否有任何陷阱,我我在这里失踪。
我有一个静态分配的对象。此对象没有operator=
,我需要重建它。重新调用静态分配对象的构造函数
所以,这确实不为我工作:
myObj = T(...);
我目前的做法是:
myObj.~T()
new(&myObj) T(...);
但感觉错了,所以我想知道是否有任何陷阱,我我在这里失踪。
如果对象是静态分配的,你想重新分配它,而不诉诸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
}
将对象创建为std::experimental::optional
,现在可以随意重新创建对象。请记住在每次使用前确保它存在。
boost
也有这样的一个类,根据我的经验,你也可以推出自己的可选项。
如果你真的必须的话,这是做到这一点的方法。但海事组织的问题是导致你必须这样做的设计决定。你不能有一个像'reset()'或其他成员函数吗? – jrok 2014-10-31 17:23:09
*如何静态分配? 'const'合格? – Deduplicator 2014-10-31 17:23:15
您可以改为使用静态unique_ptr,并在指针中分配一个新对象。 – 2014-10-31 17:24:34