MFC覚え書き(概要〜CObject)
これは何?
どーにもこーにもお仕事に使っているC++になじめないので、苦手な部分、知らなかった部分を取りまとめてブログに書くシリーズです。
C++脱初心者を目指す人レベルと思ってます。
ちなみに環境は、主にVisual C++ 2005 Express EditionとVisual C++ 2005です。
と、言うわけで2回目はお仕事で使い始めたMFCについて。
概要
Microsoft Foundation Class (MFC)は、マイクロソフトがVisual C++用に開発した、Windows用のアプリケーション構築のためのアプリケーションフレームワーク(クラスライブラリ)である。
via Microsoft Foundation Class - Wikipedia
- オフィシャルのリファレンス:MFC リファレンス (MFC)
CObjectの特徴
CObjectのリファレンス:CObject クラス (MFC)
- newやdeleteのメモリ効率の最適化
- オブジェクトを丸々バイナリデータにするシリアル化(CArchiveクラスでバイナリ化する)
- ランタイムクラスの情報を持つことで、以下の機能を実現。
- typeof風な関数 CObject::IsKindOf (C++ってtypeof未サポートなのね)
- オブジェクトの動的生成
- デバッグ用のいろんな機能
ちなみに単に継承しても上記の恩恵は受けられず、ヘッダでのクラスの中でマクロ DECLARE_〜 を宣言、cpp側で、実装前にマクロ IMPLEMENT_〜 を宣言する必要がある。
DECLARE、IMPLEMENTの種類は以下の通り。
マクロ名 | DECLARE_DYNAMIC IMPLEMENT_DYNAMIC |
DECLARE_DYNCREATE IMPLEMENT_DYNCREATE |
DECLARE_SERIAL IMPLEMENT_SERIAL |
---|---|---|---|
対応機能 | IsKindOf | IsKindOf 動的生成(CreateObject) |
IsKindOf 動的生成(CreateObject) シリアライズ |
クラスの動的生成について
リファレンス:CRuntimeClass::CreateObject (MFC)
動的生成したいクラスのランタイムクラスのみを生成して、そこから必要に応じてCRuntimeClass::CreateObjectにて、インスタンスを生成できる。
たとえばこの質問→多数のクラスの中から必要なクラスだけインスタンス化し管理する方法 みたいに、配列でクラスを管理して必要に応じてnewしたいけど、インスタンスを直接持ってるとメモリを食ってしまうし、いちいちnewするメソッドを作るのも面倒な時にとか便利。
- 動的生成のサンプル:動的にオブジェクトを作成
とりあえず、今日はここまで。