Article View: japan.comp.lang.visual-c++
Article #14Re: コンストラクタ内を避けるべき処理
From: Yoshio Kiya
Date: Mon, 08 May 2000 00:00
Date: Mon, 08 May 2000 00:00
48 lines
2784 bytes
2784 bytes
synsyrさん、こんにちは、木屋です。
synsyr wrote in <8f0qal$jrh$1@nwms2.odn.ne.jp>
> 私もこれで悩んでいまして、いまだに例外処理が使いこなせていな
> いです。
私も使いこなせてはいませんが例外は大好きです。特に、スレッ
ドの終了に使うととっても便利です。オーバーヘッドが気になりま
すが…
基本的には、new しないようにすれば問題なさそうです。どうし
ても new するときは、ローカル変数として作成したオブジェクト
のメンバーにポインターをもたせてデストラクターで破棄してます。
> 私の場合はここまでするのは耐えられないので、結局コンストラク
> タでは例外やエラーを発生させる処理はしないで、Init()みたいな
> イニシャライザを明示的に呼ぶようにしています。これはこれで、
> 問題があるのですが・・・。
あ、わたしもそうです。私の場合は「構築第2段階」として、iC
reate() なるメンバーを作って、コンストラクターと対にして使っ
てます。(CWnd とかと同じです)
> 上記のような処理をする為に、明示的にコンストラクタを呼ぶメリッ
> トは、今のところ私にはわからないのですが、なにか理由がありま
> したら、教えていただけないでしょうか。
コンストラクターに例外が組み込まれた出来合のクラスを使うと
きにはどうしても必要になると思います。
# あんまり使わないですけど…
明示的にコンストラクターを呼ぶ必要がある場面には良く出会い
ます。一番多いのは、CArray などのテンプレートを使う場合です。
あとは、クラスインスタンスの配列を、ローカルヒープ上に取る
場合などは、メモリー確保は、API になりますので、コンストラク
ターを明示的に呼ぶ必要があります。
void* pvoBuff = ::HeapAlloc( hHeap, 0, sizeof(CHoge)*ITEMS );
CHoge* p = (CHoge*)pvoBuff;
for ( int i = 0 ; i < ITEMS ; ++ i )
{
p->CHoge::CHoge( );
++ p;
}
=== Nihon Application Co.,LTD. 木屋 善夫 kiya@nac.co.jp ===
Technical Details
Message-ID:
<8f5cue$rjs$1@newsgw8.odn.ne.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8evptd$4m2$2@newsgw8.odn.ne.jp> <8f0qal$jrh$1@nwms2.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: Yoshio Kiya <kiya@asahi.email.ne.jp> Subject: Re: コンストラクタ内を避けるべき処理 Date: 2000/05/08 Message-ID: <8f5cue$rjs$1@newsgw8.odn.ne.jp> X-Deja-AN: 620510511 Content-Transfer-Encoding: 7bit References: <8evptd$4m2$2@newsgw8.odn.ne.jp> <8f0qal$jrh$1@nwms2.odn.ne.jp> Content-Type: text/plain; charset="iso-2022-jp" X-Complaints-To: news@odn.ad.jp X-Trace: newsgw8.odn.ne.jp 957757198 28284 210.237.160.199 (8 May 2000 03:39:58 GMT) Organization: odn.ne.jp Mime-Version: 1.0 NNTP-Posting-Date: 8 May 2000 03:39:58 GMT Newsgroups: japan.comp.lang.visual-c++,fj.comp.lang.c++