2010年2月6日 星期六

C++物件模型之二

今天要上一道小菜: constructor initialization list

概念很簡單,以下的constructor寫得不好:
class Person {
    String _name;
    int    _age;
public:
    Person() {
        _name = 0;
        _age = 0;
    }
};
因為compiler會把它轉化成以下(*):
Person() {
    String tmpString(0);    // temporary String object been created
    String _name.String();
    _name = tmpString;      // copy assignment operator been called
    tmpString.~String();    // destruct temporary String object

    _age = 0;    // basic data type, set value directly
}

2010年2月1日 星期一

C++物件模型之一

記得十幾年前當C++正席捲整個軟體業的時候,有部分engineer拒絕從C進化到C++,主要的論點是C++ compiler在背後做太多事,以至於影響程式的效能。時至今日,C++早已成為許多軟體、系統的基本開發語言,但我覺得我自己對於compiler到底在程式碼上面動了甚麼手腳,掌握度還是不夠,於是開始研究起C++物件模型,並且想用一系列的文章和大家交流一下。