**
有時候我們會不希望當前類被複製,因為有可能類中的成員不建議被複製比如鎖,一些智慧型引數等,這個時候想到的辦法就是禁止類中拷貝建構函式和過載操作符=這兩個成員函式的禁用了,有以下兩種方法可以解決這個問題。
// c++ 11以上均可用
class testdeletecopy
public:
testdeletecopy(const testdeletecopy&) = delete;
testdeletecopy& operator=(const testdeletecopy&) = delete;
private:
int m_count;
pthread_mutex_t m_mutex;
};
以上用delete關鍵字將兩個具有拷貝功能的函式給遮蔽了。
// 任何版本均可用
class testprivatecopy
private:
testprivatecopy(const testprivatecopy&);
testprivatecopy& operator=(const testprivatecopy&);
private:
int m_count;
pthread_mutex_t m_mutex;
};
私有化這兩個函式,外部是無法成功呼叫的。
通常的c++類:
class testcopyconstructor
public:
testcopyconstructor(const testcopyconstructor& other)
testcopyconstructor& operator=(const testcopyconstructor&other)
private:
int m_count;
//pthread_mutex_t m_mutex;
};
測試拷貝過程的呼叫過程:
testcopyconstructor a(1);
testcopyconstructor b = a
;//copy constructor called!
b=a;//operator = called!
testcopyconstructor c(a);//copy constructor called!
這說明宣告乙個新的類變數的時候賦值其實是拷貝建構函式在生效。 C 建構函式深入理解
01 初始化引數列表.cpp include include include using namespace std struct student 拷貝建構函式定義 拷貝建構函式的有效引數,必須是該類的物件的引用 if 1 student student s,int class no 1 else ...
深入理解各種建構函式
include includeusing namespace std class test else test const test t else test operator const test t pdata new char strlen t.pdata 1 strcpy pdata t.pd...
深入理解js建構函式
在j ascript中,建立物件的方式包括兩種 物件字面量和使用new表示式。1.1物件字面量是一種靈活方便的書寫方式,例如 var o1 這樣,就用物件字面量建立了乙個物件o1,它具有乙個成員變數p以及乙個成員方法alertp。這種寫法的缺點是 每建立乙個新的物件都需要寫出完整的定義語句,不便於建...