C++クラス内メンバクラスの初期化について

「C++の関数が多重継承している」という勘違いから正しい理解に到るまでの自分用備忘録。
1
idojun @idojun

@takmin @naokiring がおっしゃるように,初期化子を使わないと1度デフォルトコンストラクタが実行されるので,代入のコストが無駄ですし.あ,デフォルトコンストラクタがないメンバの場合も初期化子必須ですね.

2011-04-28 21:56:09
藤本直明/FUJIMOTO Naoaki @naokiring

@idojun @takmin あと、コンストラクタ初期化子内で例外が発生した場合(mallocに失敗した場合とか)に、適切にリリースされる。というのもあった気がするんですが、ちょっとあいまい…。

2011-04-28 21:56:12
idojun @idojun

@idojun @naokiring 結論としては,EffectiveC++の最初の方を読むということで…w

2011-04-28 21:57:06
藤本直明/FUJIMOTO Naoaki @naokiring

@idojun @takmin そうですね。デフォルトコンストラクタを使う場合は、単に初期化子を省略しているだけ、という風に理解しておけば…。

2011-04-28 21:57:43
Minagawa Takuya @takmin

@miyabiarts なるほど。クラスの継承表現と似ていたので、こんがらがっちゃいました。ありがとうございます。

2011-04-28 21:59:29
藤本直明/FUJIMOTO Naoaki @naokiring

@takmin そういう理解でいいと思います。A()の中に入った時点で、bのデフォルトコンストラクタはすでに呼ばれていますし(デフォルトコンストラクタB()が無ければ(privateなら)、そもそもコンパイルエラーに…)

2011-04-28 22:01:26
Minagawa Takuya @takmin

@naokiring @idojun ありがとうございました!EffectiveC++、買ってみます。

2011-04-28 22:06:32