如何避免默认会员建设?

时间:2015-02-03 20:28:11

标签: c++

我正在为我的类实现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;
  }
};

0 个答案:

没有答案