【问题标题】:Questions about unique pointers关于唯一指针的问题
【发布时间】:2020-08-25 16:13:10
【问题描述】:
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】:

    您不能复制std::unique_ptr。这就是重点——它是一个独占所有权智能指针。如果您制作副本,您将不再拥有独占所有权。

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

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

    【讨论】:

    • 感谢您先回答。 reset() 函数不会重新分配吗? reset() 调用前后的唯一指针地址不同。这不是意味着它已经被重新分配了吗?
    • @김정연 不。所有这些都是转移分配的所有权,该分配已经由另一个 std::unique_ptr 对象管理。将一个指针分配给另一个指针并不意味着发生任何分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2011-12-09
    • 2015-09-27
    • 2023-01-08
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多