如何解决在'this'上调用析构函数然后为'this'分配一个新值是否有效?
假设我正在实现某个类 A
,它有一个 clear()
方法,该方法应该将对象状态设置为“全新”状态,就好像它刚刚使用构造函数创建一样:>
- 我应该释放当前对象正在使用的所有资源(与
A::~A()
所做的完全相同), - 然后我应该再次初始化这些资源(与
A::A()
所做的完全相同)。
所以我最初的想法如下:
void A::clear() {
this->~A();
*this = A();
}
但是,我被告知此代码会导致 UB,因为在调用其析构函数后我无法取消引用 this
。但同时我也被告知了一个更好的主意:如果我们使用新的布局,则没有取消引用,所以这实际上可能有效:
void A::clear() {
this->~A();
new (this) A();
}
这感觉非常不舒服,而且很容易出错……那么这段代码真的有效吗?
解决方法
这个代码真的有效吗?
您的代码有效。仅仅改变对象的值也是一种相当不寻常的方法。
单独的赋值运算符,如果正确实施,就可以实现这一点。
void A::clear() {
*this = A();
}
如果此代码未按预期工作,则您的赋值运算符未正确实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。