Article View: japan.comp.lang.visual-c++
Article #22Re: コンストラクタ内を避けるべき処理
From: Nakamura Akifumi
Date: Sat, 06 May 2000 00:00
Date: Sat, 06 May 2000 00:00
37 lines
2674 bytes
2674 bytes
中村っす。ごみ。
japan.comp.lang.visual-c++,fj.comp.lang.c++ の <8ev2fq$pqb$1@news.cds.ne.jp> の
記事において 2000年05月06日(土) 03時04分22秒頃、
Yuki Shiino <yuki@cds.ne.jp>さんは書きました。
>> 必要なエラー処理は全て入れ、エラー発生は例外で伝えます。
>
> エラーの別の通知法としては、エラー状態を保持するというものも
>あります。
>
> ifstream fin("DataFile");
> if (!fin) error(); // if (fin.fail()) error();
>
>の様なパターンです。例外を投げた方が良いのか、エラー状態を保持
>した方が良いのかは、複数の判断基準によって決まる難しい問題でしょ
>う。
C++って面倒だなあ。
delphiやjavaやRuby(関係ないか)みたいに
1:オブジェクトを他のオブジェクトに「埋め込む」ことを許さない。
オブジェクト変数は全部参照だけ。
2:オブジェクトの内容は、ほっとけばNULLで埋め尽くされてる。
とすれば、面倒は控えめにいっても半分くらいに減るのにね。
delphiだとさらに
3:コンストラクタで例外出たらデストラクタが呼ばれる
ので、結局デストラクタではメンバ変数のうちNULLになってない
(=有効な)物のみを後片付けするようにすればいいし、
4:変数の値がNULLでなけばデストラクタを呼ぶ、という
freeという「非virtualな(笑)」メソッドが用意されている(^^;
ので、NULLかどうか判定するif文すら書く必要がない。
多くの場合何も考えずとも対処できる(したことになる)。めちゃ楽。
これを知るまで、非virtualメソッドに効率以外の積極的な利用価値が
あるとは知りませんでした(^^;。まぁNULLすらオブジェクトである
ような処理系にすればいいとも言いますが…
Technical Details
Message-ID:
<20000506121624BXQ04723@nifty.ne.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> <8ev2fq$pqb$1@news.cds.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: BXQ04723@nifty.ne.jp (Nakamura Akifumi) Subject: Re: コンストラクタ内を避けるべき処理 Date: 2000/05/06 Message-ID: <20000506121624BXQ04723@nifty.ne.jp> X-Deja-AN: 619846630 X-Posting-Software: WSNews 2.027 (UNREGISTERED) References: <8es3l3$kas$1@pin2.tky.plala.or.jp> <8eu2vv$pun$1@newsjp.mbn.or.jp> <8ev2fq$pqb$1@news.cds.ne.jp> Content-Type: Text/Plain; charset=ISO-2022-JP X-Complaints-To: - X-Trace: nw042.infoweb.ne.jp 957583866 22560 202.219.30.132 (6 May 2000 03:31:06 GMT) Organization: Nifty News Service Mime-Version: 1.0 NNTP-Posting-Date: 6 May 2000 03:31:06 GMT Newsgroups: japan.comp.lang.visual-c++,fj.comp.lang.c++