学生の皆さんへ.
しばらく動かしているとアプリケーションの実行速度が遅くなってくるとき,リソースリークしてる可能性が高いです.
CDC* pdc = obj.GetDC();
...
obj.ReleaseDC(pdc); // これ忘れていない?
気をつけましょう.
まあ,あとは
template <typename OBJ> class DCHolder { DCHolder(const DCHolder&); // コピー禁止のため DCHolder& operator=(const DCHolder&); // コピー禁止のため OBJ* obj; CDC* pdc; public: DCHolder(CDC* pdc, OBJ* obj) { this->pdc = pdc; this->obj = obj; } virtual ~DCHolder() { obj->ReleaseDC(pdc); } CDC* GetSafeDC() { return pdc->GetDC(); } }; { DCHolder<CStatic> holder(pdc, obj); CDC* pdc2 = holder.GetSafeDC(); // ReleaseDC不要 }
ReleaseDCしなくてもいいようにするとか.
こうしちゃダメですよ.
CDC* pdc2 = DCHolder<CStatic>(pdc, obj).GetSafeDC();
これって禁止できないのかな?