C++ 是否保证从共享ptr移动的文件会被清空?

C++ 是否保证从共享ptr移动的文件会被清空?,c++,c++11,move,shared-ptr,C++,C++11,Move,Shared Ptr,考虑以下代码: struct Bar { std::shared_ptr<int> MemberFunction() { return std::move(m_memberVariable); } std::shared_ptr<int> m_memberVariable; }; 结构栏 { std::shared_ptr MemberFunction() { 返回std::move(m_memberVariable);

考虑以下代码:

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

    std::shared_ptr<int> m_memberVariable;
};
结构栏
{
std::shared_ptr MemberFunction()
{
返回std::move(m_memberVariable);
}
std::shared_ptr m_memberVariable;
};
是否保证
std::move
shared\u ptr
中删除成员变量中的引用?或者我应该复制、清除并返回副本以保证这一点*

显然,在
unique\u ptr
的情况下,它做了正确的事情(不可能不做),但是标准是否保证
std::move
d from
shared\u ptr
释放其引用?[当它是一个成员变量(静态或全局)时,局部变量并不重要,因为它们超出了范围]


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

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

shared_ptr(shared_ptr&r)无例外

template shared_ptr(shared_ptr&&r)无例外

效果:移动从
r
构造一个
共享的\u ptr
实例

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


你想要实践,还是想要《标准》中的章节?实际上,即使标准没有坚持这一点,任何这样做的编译器都会被认为是邪恶的。