C++ 重新调用静态分配对象的构造函数
我有一个静态分配的对象。这个对象没有C++ 重新调用静态分配对象的构造函数,c++,C++,我有一个静态分配的对象。这个对象没有操作符=,我需要重建它 所以,这对我来说并不管用: myObj = T(...); 我目前的做法是: myObj.~T() new(&myObj) T(...); 但是感觉不对,所以我想知道这里是否有我遗漏的陷阱。如果一个对象是静态分配的,并且您希望在不诉诸UB的情况下重新分配它,那么最好的办法就是控制范围并决定 最晚在什么时候,您可以等待,直到您应该分配对象 最早什么时候你应该释放这个物体 为了更好地理解它,让我们考虑一个例子 void foo(
操作符=
,我需要重建它
所以,这对我来说并不管用:
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
}
将对象创建为对象,现在可以随意重新创建它。每次使用之前,请记住确保它存在
boost
也有这样一个类,根据我的经验,您也可以推出自己的可选功能。如果您真的必须这样做,这是一种方法。但在我看来,问题在于设计决策导致你不得不这么做。你不能有一个像reset()
之类的成员函数吗?它是如何静态分配的const
-合格?您可以使用一个静态唯一\u ptr,并在指针中分配一个新对象。如果new
抛出,则该对象将不存在,当它在程序结束时自动销毁时,会给出未定义的行为。显然,构造函数会做一些您希望做两次的事情(或更经常)。您的问题太模糊,无法给出具体的解决方案,但您解决此问题的长期目标应该是将功能从构造函数中移出,转移到可以随时调用的正常函数中。尝试重新调用构造函数只不过是修复设计问题的症状。