effective C 條款十一解讀

2021-08-07 04:01:48 字數 847 閱讀 7013

在類的operator= 中處理自我賦值的情況。

在說這個主題之前,先考慮一下**:

class string

private:

char* pstr;

}

顯然這一段**中如果this 與rhs指向的是同乙個物件,程式就會出現不明確的行為。

解決自我賦值問題主要有三大方法:

1.判斷是否是同乙個物件。

2.在刪除自身資源前保留乙份副本。

3.copy and swap技術

現在分別以三段**來展示這三個技術:

判斷是否是同乙個物件:

class string

private:

char* pstr;

}

這種判斷是否是同乙個副本的**,在某些情況下可能不是異常安全的,。

在刪除自身資源前保留副本:

class string

private:

char* pstr;

}

這種做法是異常安全的**,在new char 丟擲異常的時候,原來的pstr資訊並沒有丟失。

copy and swap的做法

class string

string& operator=(const string& rhs)

private:

char* pstr;

}

這也是一種異常安全並且能解決自我賦值的方案

Effective C 經驗條款

高效c 4 必須返回物件時,別妄想返回其reference 這句話什麼意思呢?就是在乙個函式內,如果你需要這個函式返回乙個新的物件,那麼這個函式的返回值型別就不要定義成引用型別。就直接返回這個類型別。首先,我們知道在函式傳遞引數時,傳遞引用的好處,尤其是對那麼比較大的型別,但是對於內建型別和stl的...

effective c 條款總結

條款1 盡量用const 和inline 而不用 define 條款2 盡量用而不用 條款3 盡量用new delete 而不用malloc free 條款4 盡量使用c 風格注釋 條款5 對應的new和delete 都要採用相同的形式 條款6 析構函式裡對指標成員呼叫delete條款 條款7 預先...

Effective C 經驗條款

高效c 模板與泛型程式設計 在c 中模板體現的是編譯期多型,virtual體現的是執行期多型。關於typename的雙重含義 在宣告template引數時,不論使用keywordclass或typename,意義全然同樣。可是c 並不總是把class和typename視為等價。有時候必須使用type...