Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

【C++】 DA でクラスを使用する場合の注意点

[開発情報]

概要

 DA に代表されるコードリソースでは、大域データを使用する C++ の機能(仮想関数、例外処理、実行時型情報など)を使用することはできません。このトピックでは、これらの機能を使用していない場合でも発生する問題とその対処について記述しています。( 環境は CodeWarrior です )

説明

 単純に階層化だけを目的として派生を使用すれば、DA でもクラスが使えるはずなのですが、派生関係に加わっているクラスにデストラクタが含まれていると、何故か例外や実行時型情報に関するリンカエラーが発生してしまいます。これは、デストラクタを virtual 宣言していない場合でも発生するため、事実上デストラクタを使用することができません。

 はっきりとした原因はわかりませんが、派生関係に関わっているクラスのデストラクタに関してはコンパイラが自動的に仮想関数化するのかもしれません。なお、派生に加わらないクラスに関してはデストラクタがあっても問題ないようです。

 

参考情報

 CodeWarrior のマニュアルに何か書いてあるかもしれませんが、全て読んでいるわけではないので、お気づきの方がいましたらご指摘願います。

注意事項

 この情報は、筆者が CodeWarrior を使用した際に発生した事象と、手探りで原因を調査した結果を書き記したものです。そのため、他の開発環境には当てはまらない可能性があります。

コメント

お名前: コメント:


表示された文字列