我知道这个问题已经被问过好几次了,但是我找不到针对这种情况的答案。
假设我有一个琐碎的类,它不拥有任何资源,并且具有空的析构函数和默认构造函数。它具有少数带有类内初始化的成员变量;没有一个是const
。
我想重新初始化和此类对象,而无需deInit
手动编写方法。这样做是否安全?
void A::deInit()
{
new (this)A{};
}
我看不到任何问题-对象始终处于有效状态,this
仍然指向同一地址;但是它是C ++,所以我想确定。
*this = A{};
?
*this = A{};
表示,this->operator=(A{});
即创建一个临时对象并将其分配给*this
,用临时值替换所有数据成员的值。因为这就是您想要的,而且(在我看来)比新的展示位置更具可读性,所以我会选择它。