C 深入理解系列 建構函式的技巧

2021-08-13 09:57:03 字數 1285 閱讀 5942

**

有時候我們會不希望當前類被複製,因為有可能類中的成員不建議被複製比如鎖,一些智慧型引數等,這個時候想到的辦法就是禁止類中拷貝建構函式和過載操作符=這兩個成員函式的禁用了,有以下兩種方法可以解決這個問題。

// 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。這種寫法的缺點是 每建立乙個新的物件都需要寫出完整的定義語句,不便於建...