关于唯一指针的问题

问题描述 投票:1回答:1
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()重新分配?

有没有理由不做浅表复制?

c++ c++11 memory smart-pointers unique-ptr
1个回答
2
投票

您无法复制std::unique_ptr。这就是重点-这是专有所有权的智能指针。如果您制作副本,则不再拥有专有所有权。

[reset()拥有_Right.release()从移动源释放的原始指针的所有权,同时还确保首先删除分配目标当前拥有的任何指针。

请注意,没有“重新分配”。 reset()不执行任何分配-它假定给定原始指针的所有权,同时可能[[deallocating在reset()调用时它拥有的任何对象。

© www.soinside.com 2019 - 2024. All rights reserved.