Dav*_*vid 9 c++ shared-ptr c++11
如果我move shared_ptr'进shared_ptr''b'是'a'保证为空?
指定移动后是否为任何标准类的状态?
Xeo*_*Xeo 13
如果指定,则在它们的构造函数和(如果可赋值)赋值运算符子条款下.因为shared_ptr我们有:
§20.7.2.2.1 [util.smartptr.shared.const]
shared_ptr(shared_ptr&& r) noexcept;
template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept;
Run Code Online (Sandbox Code Playgroud)
p20 备注:第二个构造函数不得参与重载决策,除非
Y*可以转换为T*.
p21 效果:移动构造shared_ptr实例r.
p22 后置条件:*this应包含旧值r.r应该是空的.r.get() == 0.
赋值运算符shared_ptr基本上通过copy-and-swap描述,并使用(如果是rvalue)参数构造的临时构造:
§20.7.2.2.3 [util.smartptr.shared.assign]
shared_ptr& operator=(shared_ptr&& r) noexcept;
template<class Y> shared_ptr& operator=(shared_ptr<Y>&& r) noexcept;
Run Code Online (Sandbox Code Playgroud)
p4 效果:相当于
shared_ptr(std::move(r)).swap(*this).
p5 返回:*this.
如果没有指定,@ AProgrammer说的适用.