在移动分配运算符内部调用d-tor是好的做法吗?
这里有一些示例代码:
VectorList &operator = (VectorList &&other){
~VectorList(); // if this is not a good practice,
// I will need to paste whole d-tor here.
_buffer = std::move(other._buffer );
_dataCount = std::move(other._dataCount );
_dataSize = std::move(other._dataSize );
other._clear();
return *this;
}
我应该使用此代码,还是应该对移动构造对象使用swap()?
~VectorList
除了在dtor主体中运行代码外,它的作用还不止于此:它实际上破坏了对象。
此后,该存储将不被使用。您可以使用构造函数在那里构造一个新对象,但是简单地访问成员将要么是未定义的行为,要么是要求语言律师查找允许对其进行定义的漏洞。
即使定义了,也是很危险的,因为在销毁自动存储对象时抛出异常是个坏消息。另外,如果分配给的类实际上是派生类型,则dtor调用本身就是UB!
也不是一个值得的方法。好处太小了。
更好的选择是复制交换(至少易于纠正:它可以阻止某些优化),或者从dtor和分配中重构出“清晰”的代码。然后在两个位置都调用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句