Article View: japan.comp.lang.visual-c++
Article #8Re: コンストラクタ内を避けるべき処理
From: 電子のお針箱
Date: Sun, 07 May 2000 00:00
Date: Sun, 07 May 2000 00:00
88 lines
3179 bytes
3179 bytes
Yoshio Kiya <kiya@asahi.email.ne.jp> wrote in message
news:8evptd$4m2$2@newsgw8.odn.ne.jp...
> > この基準の意図がわかりません。エラーを返しにくいと言うことですか ? 例
> > 外処理で十分と思いますが...。
>
> 私はこれで良く悩んでいるのですが、コンストラクターで例外を
> 発生させた場合、メモリーの解放が面倒ではありませんか?
ありゃ、本当だ。すみません、気づいていませんでした。m(_._)m
> わたしは、自分の後始末は自分でしたいので、しかたなく、下記
> のようにすることはありますが…
>
> class CHoge* pc = (CHoge*)new BYTE[sizeof(CHoge)];
> try
> {
> pc->CHoge::CHoge();
> }
> catch ( ... )
> {
> delete pc;
> }
おお、なるほど...。
> MFC の CFile::CFile(LPCTSTR, UINT) なんかみると、何もして
> いないので、たぶん、残ったメモリーはOS終了時に自動的に解放
> されることを期待しているのかなぁなんて思っています。
VC++ 4.0 のヘルプ (KB: Q132893) を見ると、「こう言う時は、Two-phased
construction で解決できる。」と書いてあって、どれどれと見てみると単に...
class CHOGE {
public:
CHOGE(){}; // 例外は発生させない...。
Create(){
// ここで本当のオブジェクト構築を行う。
}
}
void foo()
{
CHOGE *pc = new CHOGE;
try {
pc->Create();
...
}
catch (...){
delete pc;
}
}
の様にしてねと言うことでした。
> なんで、CFile::CFile(LPCTSTR, UINT) 使うときは必ずローカル
> 変数またはメンバー変数にしてます。
>
そう言う意味で、Microsoft としては...
try {
CFile *p = new CFile("xxx", CFile::modeRead);
}
catch (CFileException e)
...
}
じゃなく...
CFileException e;
CFile *p = new CFile();
if(!p->Open("xxx", CFile::modeRead, &e)){
...
}
の様にして欲しいと言うことの様です...。
> # あ~気持ち悪い…
気持ち悪さは、ちょっと軽減 !? でも、面倒ですね。
--
--------------
電子のお針箱
ueno@di.mbn.or.jp
(From: ヘッダーはスパム対策のため -nospam を付加しています。)
--------------
Technical Details
Message-ID:
<8f2cml$29i$1@newsjp.mbn.or.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8es3l3$kas$1@pin2.tky.plala.or.jp> <8eu2vv$pun$1@newsjp.mbn.or.jp> <8evptd$4m2$2@newsgw8.odn.ne.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: f71b3,d8108d20cf4aa80b X-Google-Attributes: gidf71b3,public X-Google-Thread: 10a2c7,d8108d20cf4aa80b X-Google-Attributes: gid10a2c7,public From: 電子のお針箱 <ueno-nospam@di.mbn.or.jp> Subject: Re: コンストラクタ内を避けるべき処理 Date: 2000/05/07 Message-ID: <8f2cml$29i$1@newsjp.mbn.or.jp> X-Deja-AN: 620124396 Content-Transfer-Encoding: 7bit References: <8es3l3$kas$1@pin2.tky.plala.or.jp> <8eu2vv$pun$1@newsjp.mbn.or.jp> <8evptd$4m2$2@newsgw8.odn.ne.jp> X-Priority: 3 Content-Type: text/plain; charset="iso-2022-jp" X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 X-Complaints-To: news@mbn.or.jp X-Trace: newsjp.mbn.or.jp 957658645 2354 210.144.154.66 (7 May 2000 00:17:25 GMT) Organization: MediaBank,Tokyo,JAPAN X-MSMail-Priority: Normal Mime-Version: 1.0 NNTP-Posting-Date: 7 May 2000 00:17:25 GMT Newsgroups: japan.comp.lang.visual-c++,fj.comp.lang.c++