在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...