在C++ 11中顯式刪除成員函數,是否仍然值得從不可複製的基類繼承?在C++ 11中顯式刪除成員函數,是否仍然值得從不可複製的基類繼承?
我在談論你私下繼承一個具有私有或刪除拷貝構造函數和拷貝分配的基類的技巧(例如boost::noncopyable
)。
在這個question中提出的優點仍然適用於C++ 11嗎?
我不明白爲什麼有些人聲稱在C++ 11中製作一個不可複製的類更容易。
在C++ 03:
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
在C++ 11:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
編輯:
正如許多人所指出的,這是爲私人拷貝構造函數和拷貝賦值操作符be提供空體(即{})時出錯因爲這會允許類本身無誤地調用這些運算符。我首先開始不添加{},但遇到了一些鏈接器問題,這些問題讓我添加了一些愚蠢的理由(我不記得這些情況)。我知道更好知道。 :-)
你不是在描述一個習慣用法,而只是一個實現。這個習語仍然存在,現在寫起來更簡單。 – 2012-02-27 00:42:16
它比編寫一個空的私人拷貝構造函數和私人拷貝賦值操作符更簡單嗎? – 2012-02-27 00:45:07
編輯避免濫用術語「成語」。 – 2012-02-27 00:47:58