2015-11-08 152 views
4

我想在C++實現這個邏輯:C++ - 如何重複初始化對象?

Object obj(args); 
while (obj.isOK()) { 
    obj = obj.next(); 
} 

但由於Object繼承boost::noncopyable所以它沒有賦值運算符我不能使用這個確切的代碼。我可以將方法和構造函數添加到Object(但不能將其複製),但是我不希望這樣做。其他問題有手動銷燬和放置新的解決方案,如果我爲Object創建了一個新的構造函數,我可以做到這一點,但是再次,最好我不需要新的構造函數,這看起來像是一個非常討厭的解決方案。我有什麼替代方案?

+0

你可以給我'對象'的代碼我的意思是定義 –

+0

如果對象是可複製和可破壞的,你可能會memcpy它周圍。 –

+1

@JamesRoot我們應該假設這個班級由於某種原因被製作爲不可複製的。 – juanchopanza

回答

3

使Object::next突變Object到位。由於Object不可複製,因此這似乎是Object::next無論如何唯一明智的做法。

-1

Object::next返回什麼? 如果它返回一個新的Object,你可以一招,賦值運算符添加到Object

Object& operator=(Object&& obj) 
{ 
    //move its iternal state to this and then 
    return *this; 
} 

所以沒有數據重複發生,並沒有什麼實際複製。