2011-10-10
unite-outline の近況: C のマクロがどう展開されるかを表示するようにした
vim, unite-outline, c, c++
C のマクロが展開されてどうなるかを => の後に表示するようにしてみた。
Before:
↓
After:
上の画像より空間の利用効率が上がって情報量が増えたのがわかると思う。
do { ... } while(0) のような複数行に渡るものは最初の数行分しか表示できないけど、アウトラインってことならこんなもんで十分だろう。詳細はプレビューするなりジャンプするなりすれば確認できるわけだし。
2010-07-27
多重継承時のコンストラクタ/デストラクタの呼び出し順序2〜仮想基本クラス〜
「多重継承時のコンストラクタ/デストラクタの呼び出し順序」の続き。今回はクラス階層に「仮想基本クラス」が含まれていた場合を検証。特に、
(補足2)派生クラスのコンストラクタとデストラクタ
(中略)
1. 仮想基本クラスのコンストラクタは、仮想でない基本クラスのコンストラクタより先に呼び出される。一つの仮想基本クラスに対して一回だけ呼び出しが行われる。
の部分を実際に確かめてみようと思います。
結果は以下の通り。
* DerivedAB constructor of BaseV constructor of DerivedA constructor of DerivedB constructor of DerivedAB destructor of DerivedAB destructor of DerivedB destructor of DerivedA destructor of BaseV * DerivedXABY constructor of BaseV constructor of BaseX constructor of DerivedA constructor of DerivedB constructor of DerivedAB constructor of BaseY constructor of DerivedXABY destructor of DerivedXABY destructor of BaseY destructor of DerivedAB destructor of DerivedB destructor of DerivedA destructor of BaseX destructor of BaseV * DerivedXABYC constructor of BaseV constructor of BaseW constructor of BaseX constructor of DerivedA constructor of DerivedB constructor of DerivedAB constructor of BaseY constructor of DerivedC constructor of DerivedXABYC destructor of DerivedXABYC destructor of DerivedC destructor of BaseY destructor of DerivedAB destructor of DerivedB destructor of DerivedA destructor of BaseX destructor of BaseW destructor of BaseV
前回同様、クラス階層とコンストラクタの呼び出し順序を上の結果を元に図示してみます。(図中の左右の位置関係はクラス宣言における基本クラスの指定順序に対応しているとします)
であることがわかります。デストラクタの呼び出し順序はちょうどこの逆になります。
2010-07-26
多重継承時のコンストラクタ/デストラクタの呼び出し順序
C++独習中。現在、まったくのよちよち歩き。トムソンガゼルの生まれ立てベイビー状態ですが、多重継承時のコンストラクタ/デストラクタの呼び出し順序がどうなるのか確かめてみたりしました。
結果は以下の通り。
* DerivedA2 constructor of BaseA constructor of DerivedA1 constructor of DerivedA2 destructor of DerivedA2 destructor of DerivedA1 destructor of BaseA * DerivedAB constructor of BaseA constructor of BaseB constructor of DerivedAB destructor of DerivedAB destructor of BaseB destructor of BaseA * DerivedABCD constructor of BaseA constructor of BaseB constructor of DerivedAB constructor of BaseC constructor of BaseD constructor of DerivedCD constructor of DerivedABCD destructor of DerivedABCD destructor of DerivedCD destructor of BaseD destructor of BaseC destructor of DerivedAB destructor of BaseB destructor of BaseA
多重継承したクラスをさらに多重継承した場合、コンストラクタの呼び出し順序は以下にようになります。(図中の左右の位置関係はクラス宣言における基本クラスの指定順序に対応しているとします)
デストラクタの呼び出し順序はちょうどこの逆になります。





