條款05 C 預設編寫並呼叫的函式

2021-09-12 07:57:10 字數 552 閱讀 1738

編譯器預設編寫的函式

編譯器可以暗自為class建立default建構函式、copy建構函式、copy assignment操作符,以及析構函式。

需要注意的是:

這些函式做了什麼

default建構函式和析構函式:

呼叫基類和non-static成員變數的建構函式和析構函式;

注意:編譯器產出的析構函式是個non-virtual,除非它的基類析構宣告為virtual。

templateclass a;
copy建構函式的用法:

a a1("zhliu", 100);

a a2(a1);

a2.namevalue呼叫string的copy建構函式以a1.namevalue為實參完成初始化;

a2.objvalue拷貝a1.objvalue內的每乙個bits完成初始化。

copy賦值操作符行為基本上與copy建構函式如出一轍。

某些情況下,編譯器會拒絕為class生成operator=:

條款05 了解C 默默編寫並呼叫哪些函式

條款05 了解c 默默編寫並呼叫哪些函式 編譯器可以暗自為class建立default建構函式,copy建構函式,copy assignment操作符,以及析構函式 唯有當這些函式被呼叫,它們才會被編譯器建立出來 include include using std cout using std en...

條款05 了解C 默默編寫並呼叫哪些函式

什麼時候乙個空類,不再是空類了呢?當c 編譯器處理之後。如果沒有定義,編譯器會為你產生四個函式 1 預設建構函式 2 copy建構函式 3 賦值建構函式 4 析構函式 注意這些函式都是public且是inline的。這裡還有一點要說明的 不是說編譯器一定會為你產生這些函式,而是說,當這些函式被呼叫時...

條款05 了解C 默默編寫並呼叫哪些函式

什麼時候empty class 空類 不再是個empty呢?當c 處理過它之後。如果你定義類的時候自己沒有宣告,編譯器就會為它宣告 編譯器版本的 乙個copy建構函式 乙個copy assignment操作符和乙個析構函式。如果你沒有宣告任何建構函式,編譯器也會為你宣告乙個default建構函式。所...