環境VC6(sp5)
ウィザードを利用して挿入->クラス新規作成 とやってMFCクラスを継承しました。
するとコンストラクタ、デストラクタがprotectedになっていました。
publicに変えましたが
// 動的生成に使用されるプロテクト コンストラクタ。
などというコメントまで付けて自信満々に被保護メンバーコンストラクタを自動作成
しているところをみると、何か根拠があるんでしょうね
しかし自分はpublicに変えてやるしかないのでpublicにしてますが微妙に気になります、
どうして被保護のコンストラクタとデストラクタを生成するんでしょうか?
すんません、「被保護」ってどーゆー意味っすか?
MFCのクラスはなんですか?
クラスによっても変わります。
> 「被保護」ってどーゆー意味っすか?
protected のことだと思われ。そういう訳を当てている文献もあります。
VC++ 2005 で試してみたら、Document クラスと View クラスがそのようなコンストラク
タになっていますね。
2005 のコメントはわかりやすいですよ。「シリアル化からのみ作成します。」だそうで
す。
よーするに、「勝手に生成しないでね」をコードで表現したってことね。
> どうして被保護のコンストラクタとデストラクタを生成するんでしょうか?
の答になっていますか?
それとも「どうして勝手に生成しちゃいけないんですか?」ってことですか?
protectedを被保護と訳していたものがあったので一般的に流通するのかなと
思ってしまいました。解かりにくかったですかね。
派生元のMFCのクラスは CMiniFrameWndです。
シリアル化からのみ作成というのは、「シリアル化」という手続きにおいて
オブジェクトが生成されるという意味ですか?
未だにコンストラクタをprotectedにする理由が理解できません
ベースになるクラスによって異なるということは理由があるんでしょうが
シリアル化の例で「ハハーン」と解かればヨカッタのですが洞察力が無くスイマセン
ハイ
>それとも「どうして勝手に生成しちゃいけないんですか
ってことです
考えられるのはMFCでは「newによる生成を前提としている場合」。
Windowが閉じるタイミングで delete this; していたりします。
そんなインスタンスをnewせずに生成すると、まず間違いなくかっ飛びます。
だからといってnewによる生成だけを許すのはキツいのでコンストラクタをnon-public
にすることで「勝手な生成」を抑止してんでないかしらん。
>newによる生成だけを許すのはキツいので
そう見たいですね、
DestroyWindow でフレームWndオブジェクトのデストラクタが呼ばれるようで。
しかし、CMiniFrameWndもnewじゃないと問題を起こすのにそれはpublic
(もともと派生させて動きを見ようとした原因がCMiniFrameWndってnewじゃなきゃ
駄目じゃんだったり…)
皆さんお付き合いいただいてアリガトウございました。