unique_ptr& operator=(unique_ptr&& _Right) noexcept {
if (this != _STD addressof(_Right)) {
reset(_Right.release());
_Mypair._Get_first() = _STD forward<_Dx>(_Right._Mypair._Get_first());
}
return *this;
}
为什么唯一指针移动赋值运算符通过reset()重新分配?
有没有理由不做浅表复制?
您无法复制std::unique_ptr
。这就是重点-这是专有所有权的智能指针。如果您制作副本,则不再拥有专有所有权。
[reset()
拥有_Right.release()
从移动源释放的原始指针的所有权,同时还确保首先删除分配目标当前拥有的任何指针。
请注意,没有“重新分配”。 reset()
不执行任何分配-它假定给定原始指针的所有权,同时可能[[deallocating在reset()
调用时它拥有的任何对象。