C++相談室 part89

このエントリーをはてなブックマークに追加
827811 ◆QZaw55cn4c
>>814
評価版(https://downloads.embarcadero.com/free/c_builder)をインストールしました。これに付属する bcc32 のバージョンは 6.31 でした。
これを使用して、以下のソースについて、codeguard のチェック能力を調べました。
http://codepad.org/kq7NFnkJ
(1)グローバルなnew/deleteをオーバーロードする。
(2)適切でないdelete(new[] したものを delete [] せず、delete する)。
(3)仮想デストラクタを定義していない。
以上は133行目〜135行目に #define で記述しています。

それぞれの .cgl ファイルは以下のとおりでした。
アドバイスをいただいた上で到達した最終形 http://codepad.org/oOn0xNo5 問題ありません。
(1) http://codepad.org/3GQQotKu グローバルな new/delete のオーバーロードでは、codeguard は誤動作しました。
(2) http://codepad.org/RlqV8ugy きちんと検出しており、検出内容を示すコメントも適切でした。
(3) http://codepad.org/ZcKLtP1e きちんと検出しており、検出内容を示すコメントも適切でした。

>>814
>しかし今は問題がない
残念ながら上記のとおり問題はありますね。ただしグローバルに new / delete すると、gcc ではコンパイルすらできない※ので、別の意味で推奨されないこと、とも考えられ、codeguard が通らなくてもしかたがないかもしれません。
http://codepad.org/pVU3fnX4 declaration of 'void* operator new(size_t)' throws different exceptions
(これはどういう意味でしょうか?)

>>728
残念ながら再現できませんでした。codeguard の dll 内で例外が発生したのでは、こちらとしてもどうしようもない。

役立つツールを紹介していただきありがとうございました。