MFCクラス継承でコンストラクタ、デストラクタが被保護に – プログラミング – Home

MFCクラス継承でコンストラクタ、デス...
 
通知
すべてクリア

[解決済] MFCクラス継承でコンストラクタ、デストラクタが被保護に


ttn
 ttn
(@ttn)
ゲスト
結合: 19年前
投稿: 8
Topic starter  

環境VC6(sp5)

ウィザードを利用して挿入->クラス新規作成 とやってMFCクラスを継承しました。
するとコンストラクタ、デストラクタがprotectedになっていました。

publicに変えましたが

// 動的生成に使用されるプロテクト コンストラクタ。
などというコメントまで付けて自信満々に被保護メンバーコンストラクタを自動作成
しているところをみると、何か根拠があるんでしょうね

しかし自分はpublicに変えてやるしかないのでpublicにしてますが微妙に気になります、
どうして被保護のコンストラクタとデストラクタを生成するんでしょうか?


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

すんません、「被保護」ってどーゆー意味っすか?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

MFCのクラスはなんですか?
クラスによっても変わります。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 「被保護」ってどーゆー意味っすか?

protected のことだと思われ。そういう訳を当てている文献もあります。

VC++ 2005 で試してみたら、Document クラスと View クラスがそのようなコンストラク
タになっていますね。
2005 のコメントはわかりやすいですよ。「シリアル化からのみ作成します。」だそうで
す。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

よーするに、「勝手に生成しないでね」をコードで表現したってことね。

> どうして被保護のコンストラクタとデストラクタを生成するんでしょうか?

の答になっていますか?
それとも「どうして勝手に生成しちゃいけないんですか?」ってことですか?


返信引用
ttn
 ttn
(@ttn)
ゲスト
結合: 19年前
投稿: 8
Topic starter  

protectedを被保護と訳していたものがあったので一般的に流通するのかなと
思ってしまいました。解かりにくかったですかね。

派生元のMFCのクラスは CMiniFrameWndです。

シリアル化からのみ作成というのは、「シリアル化」という手続きにおいて
オブジェクトが生成されるという意味ですか?

未だにコンストラクタをprotectedにする理由が理解できません
ベースになるクラスによって異なるということは理由があるんでしょうが

シリアル化の例で「ハハーン」と解かればヨカッタのですが洞察力が無くスイマセン


返信引用
ttn
 ttn
(@ttn)
ゲスト
結合: 19年前
投稿: 8
Topic starter  

ハイ
>それとも「どうして勝手に生成しちゃいけないんですか
ってことです


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

考えられるのはMFCでは「newによる生成を前提としている場合」。
Windowが閉じるタイミングで delete this; していたりします。

そんなインスタンスをnewせずに生成すると、まず間違いなくかっ飛びます。
だからといってnewによる生成だけを許すのはキツいのでコンストラクタをnon-public
にすることで「勝手な生成」を抑止してんでないかしらん。


返信引用
ttn
 ttn
(@ttn)
ゲスト
結合: 19年前
投稿: 8
Topic starter  

>newによる生成だけを許すのはキツいので

そう見たいですね、
DestroyWindow でフレームWndオブジェクトのデストラクタが呼ばれるようで。

しかし、CMiniFrameWndもnewじゃないと問題を起こすのにそれはpublic
(もともと派生させて動きを見ようとした原因がCMiniFrameWndってnewじゃなきゃ
駄目じゃんだったり…)

皆さんお付き合いいただいてアリガトウございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました