條款25 盡可能延後變數定義式的出現時間

2022-07-06 01:48:08 字數 929 閱讀 8216

只要你定義了乙個變數,而型別帶有乙個建構函式和乙個析構函式,你就得忍受構造成本與析構成本。或許你認為你不可能定義乙個不會使用的變數,但是請看下面的**:

std::stringencryptpassword(conststd::string&password)

...

returnencrypted;

}物件encrypted並非完全沒有被使用,但是當丟擲異常時,這個物件確實沒有被使用,但是你仍舊要忍受起encrypted物件的構造,析構成本。最好的方法是延後encrypted物件的定義式,直到確實需要它時。

std::stringencryptpassword(conststd::string&password)

stringencrypted; //延後encrypted物件的定義式

...

returnencrypted;

}假設encryptpassword函式最艱難的部分在以下這個函式中進行:

voidencrypt(std::string&s);

則我們的encryptpassword函式可以這樣實現:

std::stringencryptpassword(conststd::string&password)

我們還可以接著去改進:我們知道上例中的encrypted是先定義,並呼叫了預設的建構函式,再用password進行賦值。這樣,效率是比較低的,我們完全可以直接初始化。

std::stringencryptpassword(conststd::string&password)

在這裡我們再次討論「盡可能延後」的真正意義。你不只應該延後變數的定義,直到非得使用該變數前一刻為止,而是應該嘗試延後這份定義直到能夠給它初值實參為止。

條款25 盡可能延後變數定義式的出現時間

只要你定義了乙個變數,而型別帶有乙個建構函式和乙個析構函式,你就得忍受構造成本與析構成本。或許你認為你不可能定義乙個不會使用的變數,但是請看下面的 std stringencryptpassword conststd string password returnencrypted 物件encrypt...

條款26 盡可能延後變數定義式的出現時間

條款26 盡可能延後變數定義式的出現時間 postpone variable definitions as long as possible.內容 由於定義乙個類變數時,你就必須承擔起構造和析構的負擔.所以我們要儘量減少定義一些我們不用的物件,估計你現在對這條約束很不在意,我不用它為啥要定義它,我定...

條款26 盡可能延後變數定義式的出現時間

結論1 盡可能延後變數定義式的出現,這樣做可增加程式的清晰度並改善程式效率。應該延後變數的定義,直到使用該變數的前一刻為止,甚至應該嘗試延後定義變數直到能夠給它初值實參為止。這樣不僅能夠避免構造 和析構 非必要物件,還可以避免無意義的default構造行為。當變數應用於迴圈時,有兩個一般性結構 wi...