理想にはやや距離がある lazy initialization
すっかり lazy initialization に毒されて、そこらじゅうで活躍しているわけですが、C++ では const 制限に引っかかることがあり、大変残念です。以下サンプル。
class C { Window* window; public: Window* getWindow() { if (window == NULL) window = new Window(); return window; } const Window* getWindow() const { // 苦肉の const getter return const_cast<Window*>(this)->getWindow(); } // const getter が必要になる例 int getWidth() const { return getWindow()->getWidth(); } int getHeight() const { return getWindow()->getHeight(); }
getWidth() 側で const_cast するよりは、まだこっちのほうが……。const_cast なんか使うと良心が痛むけど、いたしかたないか。const っていうキーワードは便利は便利なんですが、他の言語にはなかなか無いですね。というか const なんかよりも例外指定をちゃんと実装して欲しいんですが(参考)。
。