Effective C++

1、不想使用編譯器自動生成的函數,就該明確拒絕

若沒有自定義的構造,拷貝構造,operator=,編譯器會自動產生一份默認的,默認產生的權限都是public的,如果程序中不想用到拷貝等操作,可以自定義一份private權限的。

2、多態基類的析構函數聲明爲virtual

1.具有多態性質的base class,應該聲明一個virtual析構函數,如果class中帶有任何virtual,析構都應該聲明爲virtual。
2.如果不是用於多態情況,或者作爲base class使用,不應該聲明爲virtual。

3、絕不在構造和析構過程中調用virtual函數

在多繼承情況下,都在構造函數中調用虛函數,在構造派生類時,派生類還未構造完成,所以把基類當成派生類了。

4、令operator=返回一個 reference to *this

calss test
{
public:
    test &operator=(const test &src)
    {
        '''
        return *this;
    }
};

可以用於連鎖形式
test a,b,c,d;
d = c = b = a;
但是在處理時還應該注意自賦值問題;

calss test
{
public:
    test &operator=(const test &src)
    {
        if(this == &src)
            return *this;
        ''''''
        return *this;
    }
    test(const test &src)
    {
    //拷貝構造一定要傳遞引用==》防止遞歸構造
    }
};

5、new 和 delete採用相同的形式

new一個單一對象時,用delete刪除對象;
new一個數組時(自定義類型),new[ ] 刪除時 也同樣要 delete[ ],因爲在new時,會在數組前提供一個記錄對象個數的元素。
以獨立語句將newed 的對象置入智能指針中,防止拋出異常時察覺不到內存泄漏。

6、傳遞對象至函數中,用引用

傳遞對象參數時用引用,可以減少形參到實參的構造,析構等操作,提高效率。
但是內置類型以值傳遞更快。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章