C C 基礎知識點 一

2021-10-04 06:17:03 字數 1762 閱讀 8824

1.static關鍵字的作用

2.c++中的型別轉換符

關於c++的型別轉換詳細介紹參考這裡

3.指標和引用的區別

4.c++中的智慧型指標

c++裡面有四個智慧型指標:auto_ptr、shared_ptr、weak_ptr、unique_ptr,其中後三個是c++11支援,第乙個已經被c++11棄用。

為什麼要使用智慧型指標?

智慧型指標的作用是管理乙個指標,因為存在以下這種情況:申請的空間在函式結束時忘記釋放,造成記憶體洩漏。使用智慧型指標可以避免這種問題,因為智慧型指標就是乙個類,當超出這個類的作用域後,類會自動呼叫析構函式,析構函式自動釋放資源。

auto_ptrp1(

newstring

("hello world"))

;auto_ptr p2;

p2 = p1;

//auto_ptr不會報錯

此時不會報錯,p2剝奪了p1的所有權,但是當程式執行時訪問p1將會報錯。所以auto_ptr的缺點是:存在潛在的記憶體崩潰問題。

unique_ptrp3(

newstring

("hello world"))

;unique_ptr p4;

p2 = p1;

//unique_ptr會報錯

編譯器認為p4=p3非法,避免了p3不再指向有效資料的問題。因此unique_ptr比auto_ptr更安全。

5.陣列與指標的區別

6.野指標是什麼

7.為什麼父類的構函式必須是虛函式,c++預設析構函式不是虛函式?

將可能會被繼承的父類的析構函式設定為虛函式,可以保證在釋放基類指標時可以釋放掉子類的空間,防止記憶體洩漏。

c++預設的析構函式不是虛函式是因為虛函式需要額外的虛函式表和虛表指標,占用額外的記憶體。而對於不會被繼承的類來說,其虛析構函式會浪費記憶體。所以預設的析構函式不是虛函式。

8.函式指標

char

*fun

(char

*p)//函式fun

char*(

*pf)

(char

*p)//函式指標pf

pf = fun;

//函式指標指向函式fun

pf(p)

;//通過函式指標pf呼叫函式fun

9.靜態函式和虛函式的區別

靜態函式在編譯的時候就已經確定執行時機,虛函式在執行的時候動態繫結。虛函式因為用了虛函式表機制,呼叫的時候會增加一次記憶體開銷。

虛函式的實現:在有虛函式的類中,類的最開始部分是乙個虛函式表的指標,這個指標指向乙個虛函式表,表中存放了虛函式的位址,實際的虛函式在**段中。當子類繼承了父類會同時繼承其虛函式表,子類在重寫父類中的虛函式時,會更新虛函式表中的位址為重寫的函式位址。使用虛函式,會增加訪問開銷,降低效率。

10.過載和覆蓋區別

11. ++i和i++的實現

++i的實現

int

&int

::operator++(

)

i++的實現

const

intint

::operator

(int

)

12.寫個函式在main函式執行前先執行
__attribute

((constructor)

)void

before()

基礎知識點

1 inline block布局 2 table布局 3 justify的末行不對齊 4 兩個圖示之間有空格 換行 5 背景中的的 路徑的 全部斜槓都為 不是 命令列下的這種 doctype html html head meta charset utf 8 title xx title head ...

HTML基礎知識點一

ie trident 核心 firefox gecko 核心 safari webkit 核心 opera 以前是presto 核心,opera 現已改用google chrome 的blink 核心 chrome blink 基於webkit,google 與opera software 共同開發...

js基礎知識點(一)

js原始型別有哪幾種 null是物件嗎?boolean number null undefined string symbol 另外對於null來說,很多人會認為他是個物件型別,其實這是錯誤的。雖然typeof null會輸出object,但是這只是 js 存在的乙個悠久 bug。在 js 的最初版...