//禁止拷貝基類
class noncopyable{
protected:
noncopyable() {}
~noncopyable() {}
private:
noncopyable(const noncopyable &that) = delete;//delete拷貝構造函數
noncopyable(noncopyable &&that) = delete;//delete移動構造函數
noncopyable &operator=(const noncopyable &that) = delete;//delete拷貝賦值運算符
noncopyable &opetator=(const noncopyable &&that) = delete;//delete移動賦值運算符
};
下面再複習一下移動構造函數和移動賦值運算符
類似拷貝構造函數,移動構造函數的第一個參數是該類類型的一個引用。不同於拷貝構造函數的是,這個引用參數在移動構造函數中是一個右值引用,與拷貝構造函數一樣,任何額外的參數都必須有默認實參。除了完成資源移動,移動構造函數須確保移動後源對象銷燬是無害的。特別是當資源完成移動,源對象須不再指向被移動的資源,這些資源的所有權已經歸屬新創建的對象。