C++實現不可被複制的類
阿新 • • 發佈:2020-07-11
C++語言程式設計中,類的拷貝主要是通過拷貝建構函式和賦值函式來進行,再者就是為拷貝專門實現的成員方法。
由於拷貝建構函式和賦值函式在使用者為提供的情況下是由C++編譯器自動生成的,而且是public成員,因此預設的C++類都有拷貝功能。
一個預設的C++類所擁有的成員函式:
class Empty{}; //空類Empty Empty(); //預設建構函式 Empty(const Empty &);//預設拷貝構造 ~Empty(); //預設解構函式 Empty & operator=(const Empty &)//預設賦值運算子 Empty *operator&();//取地址運算子 const Empty *operator &() const; //取地址運算子const
程式設計師有時候需要給檔案加上許可權,讓這些機密檔案不能被隨意拷貝,這時候就需要用C++實現不可被拷貝的類。
若讓一個C++類不能被拷貝,可顯式地宣告類的拷貝建構函式和賦值函式為私有函式,從而達到該類不可被拷貝的目的。
下面簡單地提供一個基類,任何需要提供不可被拷貝功能的C++類只需從此類派生即可。
————————————————
Noncopyable類示例:
#ifndef BASE_NONCOPYABLE_H #define BASE_NONCOPYABLE_H class noncopyable { public: noncopyable(const noncopyable&) = delete; void operator=(const noncopyable&) = delete; protected: noncopyable() = default; ~noncopyable() = default; }; #endif // BASE_NONCOPYABLE_H