忙碌的一天沒時間閱讀,剛好進度過半來個期中考試,這次就用填空題來溫故知新吧。每題答案皆不唯一,僅供看官娛樂。歡迎留言討論其他可能性,一起探索 C++ 的奧妙!
Q1. 在 C++ 中,應該盡量避免使用 _______,因為它可能會導致不必要的性能損失或難以預測的行為。
new
和delete
用於動態記憶體管理,但它們的使用往往會帶來性能上的損失,且容易產生內存洩漏
應優先考慮使用 std::unique_ptr
或 std::shared_ptr
等智慧指標,而非手動管理記憶體,從而減少錯誤的機會並提高程式的可維護性。
Q2. 若在 class 的 constructor 中寫了自定義的資源管理功能,那麼在其 _______ 中也應提供相應的資源清理程式碼。
Destructor 負責釋放被 constructor 分配的資源,因而能有效避免資源洩漏。
資源管理不只是指動態記憶體分配,甚至連為了讀檔而 fopen
打開文件的操作也應該要考量到。
Q3. 為了防止內存洩漏,C++ 中的智能指標 _______ 提供了自動管理資源的功能,當指標超出作用域時,相關資源會自動釋放。
std::unique_ptr
和std::shared_ptr
是 C++11 引入的智慧指標,它們可以幫助自動管理動態分配的資源,避免手動delete
操作所帶來的錯誤。
std::unique_ptr
用於唯一擁有資源的情況,而 std::shared_ptr
則用於多個指標共享資源的情況。
Q4. 在 C++ 中,使用 _______ 可以有效地防止在頭文件中多重定義類、函式或變數,從而避免編譯錯誤。
#ifndef
和#define
都是預處理指令,可用來防止 header 文件被重複#include
。
這種技術稱為 Include Guards,確保每個同名 header 文件只會被編譯一次,從而避免多重定義的問題。一個簡單的範例如下,用以判斷 yoyo.h
是否已經被包含:
#ifndef YOYO_H
#define YOYO_H
// other defines here...
#endif
Q5. 因為有了C++ 的 _______ 機制,讓程式能在不破壞封裝的情況下,在編譯時期進行優化提高效率。
inline 允許編譯器將程式碼直接插入到每個調用該函式的地方,這樣可以減少函數調用的開銷,從而提高程式的效率。
Inline 機制在一些小函式被高頻繁調用的情況下尤為有效。然後過度使用可能導致程式體積增大、編譯時間延長,並可能降低程式的可維護性和可讀性。應該謹慎選擇哪些函式真的需要 inline。
Q6. 若將一個 class 的成員函式設置為 const
,可以保證該函式不能 _______。
當成員函式聲明為 const 時,這表示該函式不會修改該 class 的任何成員變數,並且不能調用任何非
const
的成員函數。
成員函數被宣告為 const
表示其 this
指標變為 const
,因而該指標指向的 object 無法被修改。故能保證 object 在調用這些函式後保持不變,有助於提高程式的可維護性和可預測性。