14

考虑以下代码:

struct Bar
{
    std::shared_ptr<int> MemberFunction()
    {
        return std::move(m_memberVariable);
    }

    std::shared_ptr<int> m_memberVariable;
};

是否保证std::movefrom ashared_ptr<T>实际上会删除成员变量中的引用?或者我应该复制、清除并返回副本以保证这一点*

显然,在unique_ptr<T>它做正确的事情的情况下(它不可能不做),但标准是否保证a std::moved fromshared_ptr释放它的引用?[当它是成员变量静态全局时,局部变量超出范围无关紧要]

*可能“交换并返回”比“复制、清除和返回”更好。

4

1 回答 1

17

你确实有这个保证。从 20.7.2.2.1/21-22 开始:

shared_ptr(shared_ptr&& r) noexcept;

template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept;

效果:从 移动构造一个shared_ptr实例r

后置条件:*this应包含 的旧值rr应为空。r.get() == 0.

于 2013-06-17T13:16:09.980 回答