2015-10-21 83 views
0

我想要一個具有三級繼承的類。我不會移動我的課程或複製它們。實際上,它們只會創建一次。我想測試是否有可能刪除移動和複製構造函數和分配如下:繼承和刪除複製和移動構造函數

MyClass (MyClass &&) = delete; 
MyClass (const MyClass &) = delete; 
MyClass & MyClass :: operator= (const MyClass &) = delete; 
MyClass & MyClass :: operator= (MyClass &&) = delete; 

當我這樣做,我得到了在基類構造函數和基基類的錯誤:

initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive] 

我的構造是這樣的:

Base(const string & name):BaseOfBase(name){ 

    }; 

我的問題是:

  1. 是否可以刪除所有的移動和複製構造函數和賦值運算符?
  2. 如果可能,爲什麼我會出錯?
  3. 如果是可能的話,這是一個不錯的選擇嗎?
+1

通過刪除您禁止編譯器生成的移動構造函數拷貝構造函數,所以'MyClass的(MyClass的&&)=刪除;'是多餘的(同上分配運營商) –

回答

5

你有錯誤,因爲你顯然是在錯誤的地方刪除你的方法。既然你用類名加前綴,看起來就像你在實現中刪除它們一樣。刪除正確的做法是在類定義,就像下面:

class foo { 
    foo(const foo&) = delete; 
};