C++11 C++;:对于哪些对象,为;“移动”;这不仅仅意味着;保持有效;?
假设C++11 C++;:对于哪些对象,为;“移动”;这不仅仅意味着;保持有效;?,c++11,shared-ptr,move-semantics,c++-standard-library,C++11,Shared Ptr,Move Semantics,C++ Standard Library,假设a和b属于T类型,我们有移动构造(tb(move(a));)或移动赋值(b=move(a))。在什么情况下,我们知道a的值是多少 我唯一能确定的是unique\u ptr,其中a将成为一个空指针。这是否也保证了共享\u ptr?是否有其他类别的标准保证已知值?标准库类型 根据标准N4296,§17.6.3.1,让我们将rv作为T类型的右值, 表20为可移动施工要求和表22为可移动可分配要求 手术后: T(rv); T u =rv; u = rv; 未指定rv的状态[注:rv仍必须满足使用它
a
和b
属于T
类型,我们有移动构造(tb(move(a));
)或移动赋值(b=move(a)
)。在什么情况下,我们知道a
的值是多少
我唯一能确定的是
unique\u ptr
,其中a
将成为一个空指针。这是否也保证了共享\u ptr
?是否有其他类别的标准保证已知值?标准库类型
根据标准N4296,§17.6.3.1,让我们将rv
作为T
类型的右值,
表20为可移动施工要求和表22为可移动可分配要求
手术后:
T(rv);
T u =rv;
u = rv;
未指定rv的状态[注:rv仍必须满足使用它的库组件的要求。这些要求中列出的操作必须按规定进行
rv是否已移出。-结束注释]
这意味着至少移动的对象仍处于有效状态,并且可以用作其类型的任何对象。但作为整个图书馆的要求,不需要更多。您必须阅读特定的文档
对于共享ptr,具体如下:
shared_ptr(shared_ptr&& r) noexcept;
template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept;
shared_ptr(shared_ptr&r)无例外;
模板共享(共享)无例外;
备注:除非Y*是可转换的,否则第二个构造函数不得参与过载解决
至T*
效果:Move从r构造一个共享的_ptr实例。
后置条件:*应包含r的旧值。r应为空。r、 get()==nullptr
基本类型和普通可复制项
移动的对象应保持不变。我正在寻找标准中的确认
其他类型
至少一个类的程序员应该确保这个类的对象在被移动后是可破坏的