EffectiveC++改訂2版 第9項〜第13項
第9項
メンバ関数の定義による隠蔽の話。50項では継承関係の中での話しだが、ここでは operator new() の話。
第10項
63ページにあるBLOCK_SIZEの定義はなぜか1項では「古い」とされている形式。
かつ、ここの説明での operator delete() の形式も古い形式の可能性がある。これはEffectiveC++ 改訂2版を読み始める - dogatanaの日記に関連する話。
第11項〜12項
このあたりはさらっと。
第13項
C++のルールによれば、クラスのメンバは、そのクラスで宣言された順番に初期化される。
これは薄っすら覚えているが、実際に確認してみる。
#include <iostream> //他のクラスのprivteデータメンバで使われるもの class DataClass { public: DataClass(int n = 0): data(n) { std::cout << "const with " << data << std::endl; } int value() const { return data; } private: int data; }; std::ostream& operator<<(std::ostream& output, const DataClass& v) { output << v.value(); return output; } // DataClassを使うクラス class UseClass { public: UseClass(int v1, int v2, int v3): c(v3), b(v2), a(v1) { } void show() { std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl; } private: DataClass a, b, c; }; int main() { UseClass x(1, 2, 3); x.show(); }
実行結果は次のとおり。
const with 1 const with 2 const with 3 a = 1, b = 2, c = 3
初期化リストでは、v3、v2、v1の順に記載しているが、DataClassのコンストラクタの呼び出しは宣言順であるv1、v2、v3の順になっている。なるほど。