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

基本类型和普通可复制项

移动的对象应保持不变。我正在寻找标准中的确认

其他类型

至少一个类的程序员应该确保这个类的对象在被移动后是可破坏的