我正在为我的类实现move构造函数和operator =,我希望在operator =()内部只实现一次移动。但构造成员构造之前构造的成员对象构造失败,因为它没有默认构造函数。
初始化列表可以工作,但要求我写两次移动代码。我也可以为Sprite添加默认构造函数但是...它将构造Sprite然后销毁它以应用移动赋值。它看起来不太好(并且要求我为那些不打算使用的类默认构造函数)。
我怎么能解决这个问题。或者也许有另一种做法将所有移动代码放在一个地方?顺便说一下,复制同样的问题。谢谢!
class SceneObject {
private:
Sprite m_Sprite; // Has no default constructor!
public:
inline SceneObject (const SceneObject&& val) { *this = std::move(val); }
//inline SceneObject (const SceneObject&& val) : m_Sprite(val.m_Sprite) {} -- this works!
inline SceneObject& operator= (const SceneObject&& val) {
m_Sprite = std::move(val.m_Sprite);
return *this;
}
};