Category Archives: C++ idioms

exception safety

整理一下David Abrahams提出的exception safety幾個exception handling level 這在設計function時抱持這個概念非常重要, 因為對使用function的使用者來說, 常常在使用C++的function時,會擔心function失敗時的行為。 使用者角度處理exception handling時,不確定該function到底可能會丟出哪些exception,而造成困擾。 因為可能發生的exception不單是看呼叫的function本身, 該function內部呼叫的函式有可能也會產生exception。 如果真的不確定function可能會丟出哪些exception,最好的方式就是將exception往外傳。 當exception往外傳時,代表function流程中斷了,因此這時候就需要思考function exception safety gurantee。 他的概念有點類似資料庫transaction integrity,當transcation failure, 資料庫內容的一致性要達到什麼程度。例如ACID裡的C – consistency類似exception safety的Basic exception safety(invariants在function前後保持一致) Consistency ensures that a transaction can only bring the database from one valid state … Continue reading

Posted in C++ idioms | Leave a comment

object slicing

object slicing發生在衍生類別的物件複製到基類時,預設只複製基類的成員,這時候在衍生類別的資訊會遺失。 這樣有可能造成在執行method或是destructor因為遺失了資訊而造成其他錯誤。 當複製為參考時(base class reference type),則不會有此問題。 object slicing的問題,在exception catch時要特別注意,應該要catch reference(catch(A& a)才不會造成object slicing),而不是catch value 如下面範例: 如果是 catch(A a) 會走copy ctor的路,因為是將B()複製到a,而造成object slicing,並且因為copy後,catch到的物件已經不是當時拋出的那個物件了 參考: https://en.wikipedia.org/wiki/Object_slicing https://stackoverflow.com/questions/274626/what-is-object-slicing http://ptgmedia.pearsoncmg.com/images/0321113586/items/sutter_item73.pdf

Posted in C++ idioms | Leave a comment