🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#14
From: Yoshio Kiya
Date: Mon, 08 May 2000 00:00
48 lines
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-mail
References: <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++