1. 程式人生 > 實用技巧 >C++實現不可被複制的類

C++實現不可被複制的類

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