2012-06-22 21 views

答えて

17
template<class SpiHandleT> 
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT> 
{ 
public: 
    SpiHandleIterator() : _currentHandle() 
    { 
    } 
    ... 
protected: 
    SpiHandleT _currentHandle; 
}; 

これは値初期化として知られています。 C++ 03標準、§8.5/ 7:

初期化子が空の括弧セット(すなわち、)であるオブジェクトは、値で初期化されます。

そして8.5/5:

に値初期化タイプTの目的は、意味:

  • Tユーザ宣言コンストラクタを持つクラス型の場合Tのデフォルトのコンストラクタが呼び出されます(Tにアクセスできないデフォルトコンストラクタがない場合、初期化は不正です)。
  • Tが、ユーザーが宣言したコンストラクターを持たない非共用クラス・タイプの場合、すべての非静的データ・メンバーおよび基本クラスのコンポーネントTは値で初期化されます。
  • Tが配列型の場合、各要素は値で初期化されます。
  • そうでなければ、オブジェクトが

タイプTのオブジェクトゼロ初期化にゼロに初期化される手段:

  • Tはスカラ型である場合、オブジェクトが値に設定されています0(零)はTに変換され、
  • Tが非共用クラス・タイプの場合、各非静的データ・メンバーおよび各基本クラス・サブオブジェクトはゼロ初期化されます。
  • Tがユニオンタイプの場合、オブジェクトの最初の名前付きデータメンバー)はゼロで初期化されます。
  • Tが配列型の場合、各要素はゼロで初期化されます。
  • Tが参照型の場合、初期化は実行されません。

だからあなたの場合には、それはSpiHandleTの定義に依存:

  • それはスカラーなら、それはせずにクラス型だ場合、それはゼロに初期化
  • になりますユーザが宣言したコンストラクタで、そのサブオブジェクトは(再帰的に)値によって初期化されます
  • のクラスタイプの場合は、とユーザが宣言したコンストラクタそれはデフォルト設定されます
関連する問題