理想にはやや距離がある 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 なんかよりも例外指定をちゃんと実装して欲しいんですが(参考)。