1. 程式人生 > >Effective c++ 條款26:儘可能延後變數定義式的出現時間

Effective c++ 條款26:儘可能延後變數定義式的出現時間

只要你定義了一個變數而其型別帶有一個建構函式或解構函式,那麼當程式的控制流到達這個變數定義式時,你便得承受構造成本;當這個變數離開其作用域時,你得承受其析構成本。即使這個變數最終未被使用,仍需要耗費這些成本。

1、儘可能延後變數定義式

例如,當某個變數宣告的程式碼出於一個可能丟擲異常的程式碼段之前,若出現異常,這個變數就未被使用。因此需要將這個變數的定義延後,直到確實需要它。

2、跳過毫無意義的default構造過程,給物件一個初值

你不止應該延後變數的定義,直到非得使用該變數的前一刻為止,甚至應該嘗試延後這份定義直到能夠給它初值實參為止。如果這樣,不僅能夠避免構造和析構非必要物件,還可以避免無意義的default構造行為。

3、如果變數只在迴圈內使用,把它定義於迴圈內

將變數定義於迴圈外,通常需要1個建構函式+1個解構函式+n個賦值操作,而將變數定義於迴圈內,通常需要n個建構函式+n個解構函式。如果classes的一個賦值成本低於一組構造+析構成本,前者大體而言比較高效,尤其當n值很大時,否則應該選擇後者,有時那對程式的可理解性和易維護性造成衝突。