重新调用静态分配对象的构造函数
Reinvoking the constructor of a statically allocated object
我有一个静态分配的对象。这个对象没有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
也有这样一个类,根据我的经验,你也可以滚动自己的可选类。
相关文章:
- 使用操作重载对象重新分配对象
- 静态分配对象的值初始化
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- 在 c++ 的构造函数中分配对象向量时出错
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- 操作后通过运算符分配对象
- 如何捕获源自静态分配对象的构造函数的异常?
- 在C++中,当重新分配对象时,为什么构造函数在析构函数之前触发?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 将动态分配对象传递到 boost::any 构造函数中
- 混合指向已分配对象和作用域对象的指针
- C 删除指向动态分配对象的指针
- 有关动态分配对象的问题
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 是隐式创建的默认构造函数,负责分配对象内存
- 如何删除用于动态分配对象的智能指针
- 分配对象数组时如何初始化每个对象
- 用于堆栈分配对象的C++虚拟析构函数内联