C C 程式設計 noncopyable原理及實現

2021-10-10 14:20:31 字數 1587 閱讀 9121

在c++中,類的拷貝:

由於拷貝建構函式和賦值建構函式在使用者沒有提供的情況下是c++編譯器自動生成的,而且是public成員,因此預設的c++類都有拷貝賦值功能

classa;

intmain()

如果想要乙個c++類不能被拷貝,可以顯示的宣告類的拷貝建構函式和賦值函式為私有函式,從而達到該類不可被拷貝的目的

c++11前的noncopyable

#ifndef nocopyable_h

#define nocopyable_h

/*class noncopyable的基本思想是把建構函式和析構函式設定protected許可權,這樣子類可以呼叫,但是外面的類不能呼叫,那麼當子類需要定義建構函式的時候不至於通不過編譯。但是最關鍵的是noncopyable把拷貝建構函式和拷貝賦值函式做成了private的,繼承自noncopyable的類在執行拷貝操作時會呼叫基類的拷貝操作,但是基類的拷貝操作是private的,因此無法呼叫,引發編譯錯誤。

*/class

nocopyable;~

nocopyable()

;private://

nocopyable

(const nocopyable&);

nocopyable&

operator=(

const nocopyable&);

};#endif

//nocopyable_h

c++11之後noncopyable

/*

基本思想是: 把建構函式和析構函式設定為protected許可權,這樣子類可以呼叫,但是外面的類不能呼叫。

最關鍵的是將noncopyable把拷貝建構函式和拷貝賦值函式做成

*/class

noncopyable

;

怎麼使用:只需要繼承該類就可以保證派生類不可複製

classa:

public nocopyable

;int

main()

說明:

=delete

c++11 標準引入了乙個新特性:"=default"函式。程式設計師只需在函式宣告後加上「=default;」,就可將該函式宣告為 "=default"函式,編譯器將為其自動生成預設的函式定義體,提高**的執行效率。

classa:

private noncopyable

virtual~a

()protected

:private:}

;classb:

public a

virtual~b

()protected

:private:}

;classc:

public b~c

()protected

:private:}

;int

main

(int argc,

char

* ar**)

初探boost之noncopyable學習筆記

同意程式輕鬆實現乙個不可複製的類。需包括標頭檔案 include或 include 在c 定義乙個類時。假設不明白定義複製建構函式和複製賦值操作符。編譯器會為我們自己主動生成這兩個函式。比如class empty class 實際上類似於 class empty class empty class ...

c c 程式設計風格

1.程式設計風格 請寫出 bool flag 與 零值 比較的 if 語句。3分 標準答案 if flag if flag 如下寫法均屬不良風格,不得分。if flag true if flag 1 if flag false if flag 0 請寫出 float x 與 零值 比較的 if 語句...

C C 程式設計規範

1 注意 strncpy strncat等帶n版本的字串操作函式在源字串長度超出n標識的長度時,會將包括 0 結束符在內的超長字串截斷,導致 0 結束符丟失。這時需要手動為目標字串設定 0 結束符。char dst 11 注意 最好每次定義時初始化為0 dst 11 char src 0123456...