roh*_*unb 6 c++ smart-pointers move shared-ptr
说,我有一节课:
class GameObject ///header file
{
....
std::shared_ptr<Transform> transform;
}
///cpp file
//Copy Ctor
GameObject::GameObject(const GameObject& rhs)
:transform(rhs.transform)
{}
//Move CTor
GameObject::GameObject(GameObject&& rhs)
:transform(std::move(rhs.transform))
{}
Run Code Online (Sandbox Code Playgroud)
rhs.transform.reset()在搬家后打电话取消分配rhs吗?return *this在最后?0x4*_*2D2 11
您的复制和移动构造函数等效于隐式构造函数.删除它们.您不需要将它们明确地写出来作为std::shared_ptr正确实现这两个操作的复制和移动构造函数.
或者我是否需要在搬家后打电话
rhs.transform.reset()取消分配rhs?
不,移动后的对象将在移动后失去所有权:
Run Code Online (Sandbox Code Playgroud)shared_ptr(shared_ptr&& r) noexcept; template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept;备注:第二个构造函数不得参与重载决策,除非
Y*可以转换为T*.效果:从r构造一个shared_ptr实例.后置条件:
*this应包含旧值r.r应该是空的.r.get() == nullptr.
至于复制和移动赋值运算符,它们也是等价的.移动分配将正确转移所有权,复制构造函数将执行浅层复制,以便两者shared_ptr都拥有所有权.
如果你想要一个浅拷贝(共享所有权),那么这shared_ptr是正确的工具.否则,unique_ptr如果您想实施独特的所有权,我建议您使用.