close

原文:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Doing_Work_in_Constructors

在ctor中只作class data member的賦值,或一些簡單的初始化動作;避免去做太複雜的初始化動作。若有複雜的初始化動作要完成,應該另外開一個public的member function Init(),再將複雜的初始化放在Init()裡。

雖然在ctor中作初始化很方便,但是會造成很多問題:
1. ctor沒有return value,難以用簡單的方式回傳ctor中產生的錯誤,雖然可以透過throw exception將錯誤傳出去,但是Google C++ Style Guide禁止使用exception。
2. ctor中如果出現一個不至於造成crash的錯誤,此時程式雖然沒有終止,卻處在一個錯誤的state。
3. 再ctor中呼叫virtual function會出問題,virtual function call不會呼叫到subclass中的virtual function,因為此時subclass尚未被建構出來。
4. 如果該class的instance為一個global variable(不建議使用global variable,但是還是有可能會存在global variable),此時該class的ctor會再main()之前被呼叫,有可能會破壞ctor code中的一些假設。

結論:
在Ctor中禁止呼叫virtual function以及一些複雜的操作(可能會產生錯誤的操作)。

arrow
arrow
    文章標籤
    C++
    全站熱搜
    創作者介紹
    創作者 coherence 的頭像
    coherence

    打字猴

    coherence 發表在 痞客邦 留言(0) 人氣()