您好,登錄后才能下訂單哦!
《Effective C++》
條款26:盡可能延后變量定義式的出現(xiàn)時間
只要你定義了一個變量而其類型帶有一個構(gòu)造函數(shù)和析構(gòu)函數(shù),那么當程序的控制流到達這個變量定義式時,你便得承受構(gòu)造成本;當這個變量離開作用域時,你便得承受析構(gòu)成本。即使這個變量最終并未被使用,仍需耗費這些成本,所以你應該盡量避免這種情形。
對于“盡可能延后”的理解:
不只應該延后變量多的定義,直到非得使用該變量的前一刻為止,甚至應該嘗試延后這份定義直到能夠給它初始實參為止。如果這樣,不僅能夠避免構(gòu)造(析構(gòu))非必要對象,還可以避免無意義的default構(gòu)造行為。更深一層說,以“具明顯意義之初值”將變量初始化,還可以附帶說明變量的目的。
在循環(huán)中如何選擇呢?
//方法A:定義于循環(huán)外 Widget w; for(int i = 0;i < n ; i++) { w = 取決于i的某個值; ... } //方法B:定義于循環(huán)內(nèi) for(int i = 0 ; i < n ;i++) { Widget w(取決于i的某個值); ... }
分析:
做法A:1個構(gòu)造函數(shù) + 1個析構(gòu)函數(shù) + n個賦值操作
做法B:n個構(gòu)造函數(shù) + n個析構(gòu)函數(shù)
如果classes的一個賦值成本低于一組構(gòu)造+析構(gòu)成本,做法A大體而言比較高效。尤其當n值很大的時候。否則做法B或許較好。
此外,做法A造成名稱w的作用域比做法B更大,有時那對程序的可理解性和易維護性造成沖突。因此除非(1)你知道賦值成本比“構(gòu)造+析構(gòu)”成本低;(2)你正在處理代碼中效率高度敏感的部分。否則你應該選擇做法B。
總結(jié):
盡可能延后變量定義式的出現(xiàn)。這樣做可增加程序的清晰度并改善程序效率。
2016-11-07 21:33:24
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。