iT邦幫忙

2025 iThome 鐵人賽

DAY 13
1
Software Development

30 天 Effective C++ 大挑戰!!系列 第 13

[Day 13] 綜合大會考!! —— 期中篇

  • 分享至 

  • xImage
  •  

忙碌的一天沒時間閱讀,剛好進度過半來個期中考試,這次就用填空題來溫故知新吧。每題答案皆不唯一,僅供看官娛樂。歡迎留言討論其他可能性,一起探索 C++ 的奧妙!

Q1. 在 C++ 中,應該盡量避免使用 _______,因為它可能會導致不必要的性能損失或難以預測的行為。

newdelete 用於動態記憶體管理,但它們的使用往往會帶來性能上的損失,且容易產生內存洩漏

應優先考慮使用 std::unique_ptrstd::shared_ptr 等智慧指標,而非手動管理記憶體,從而減少錯誤的機會並提高程式的可維護性。

Q2. 若在 class 的 constructor 中寫了自定義的資源管理功能,那麼在其 _______ 中也應提供相應的資源清理程式碼。

Destructor 負責釋放被 constructor 分配的資源,因而能有效避免資源洩漏。

資源管理不只是指動態記憶體分配,甚至連為了讀檔而 fopen 打開文件的操作也應該要考量到。

Q3. 為了防止內存洩漏,C++ 中的智能指標 _______ 提供了自動管理資源的功能,當指標超出作用域時,相關資源會自動釋放。

std::unique_ptrstd::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 在調用這些函式後保持不變,有助於提高程式的可維護性和可預測性。


上一篇
[Day 12] 中場休息 Q&A小測驗!!
下一篇
[Day 14] Inheritance and Object-Oriented Design I
系列文
30 天 Effective C++ 大挑戰!!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言