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