AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
C++
C++
等級 54
RAII + 例外
C++ SELF
等級 54,
課程 0
解析為什麼在 C++ 中資源會在例外發生時自動釋放(呼叫堆疊展開並執行解構函式)、RAII 如何防止資源洩漏但不能防止「部分應用」的變更、如何表述並維持類的不變量,以及為什麼在方法中的操作順序對於例外處理非常重要(以
std::vector
、
push_back
、計數器
next_id_
與索引不同步為例)。最後——實用技巧與典型錯誤,包括規則:解構函式不應拋出例外。
例外安全性保證:basic / strong / no‑throw
C++ SELF
等級 54,
課程 1
解析方法在拋出例外時具體承諾了什麼:物件的
有效性
(
basic guarantee
)、「要麼全部成功,要麼什麼都不做」(
strong guarantee
)以及禁止例外外溢(
no‑throw guarantee
)。以類似
TaskTracker
的範例展示如何在
std::vector
與索引間維護不變式,如何通過
try
/
catch
做回滾,以及為何要謹慎使用
noexcept
。
commit/rollback 慣用法
C++ SELF
等級 54,
課程 2
我們來分析為什麼
RAII
能保護資源,但不能保證在異常發生時物件不變量不被破壞,以及
commit/rollback
慣用法如何幫助達成「要麼全部生效,要麼全部不生效」。學習如何把方法拆成
prepare
→
commit
→
rollback
三個階段,使用臨時物件和以
swap
作為簡短的 commit 步驟,建立強異常安全(strong guarantee),並以
copy-and-swap
在
TaskStore
範例中說明這種方法的特例。
noexcept — 實務意義
C++ SELF
等級 54,
課程 3
拆解
noexcept
作為嚴格契約「例外不向外傳播」:函數邊界到底怎麼定義、為何違反會導致
std::terminate
、在哪些場合標記是合適的(getter、
swap
、析構函數)以及在哪些場合很危險(解析、容器擴張)。另外討論條件版
noexcept
(expr)、通過
static_assert
的檢查,以及以
TaskBook
為例的實作練習。
如何思考錯誤 — 操作前/後的不變式
C++ SELF
等級 54,
課程 4
解析在 C++ 中以「成熟」視角看待錯誤:方法契約(前置條件、後置條件與例外時的保證)、物件不變式,以及用於獲得強保證(「要麼全部成功,要麼一切如初」)的 prepare/commit 技術。以迷你類別
TaskList
為例,學習在變更前驗證輸入、透過
validate_invariant()
檢查不變式,並測試邊界情境,包括「操作中途失敗」。
Please enable JavaScript to continue using this application.