🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: japan.comp.lang.visual-c++
Article #8

Re: コンストラクタ内を避けるべき処理

#8
From: 電子のお針箱
Date: Sun, 07 May 2000 00:00
88 lines
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-mail
References: <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++