仮想関数の使用状況を検出する CPPDepend の機能に少し問題があります。次のシナリオを検討してください。CParentClass と CChildClass の 2 つのクラス。CChildClass は CParentClass から派生しています。CParentClass には仮想関数 Test があり、CChildClass は Test の基本クラス バージョンをオーバーライドします。
使用に関しては、さまざまな理由から、次のようなことをしたいと考えています:-
CChildClass * pMyChild = new CChildClass();
CParentClass * pParentClass = (CParentClass*)pMyChild;
int B = pParentClass->Test();
delete pParentClass;
これにより、必要に応じて pMyChild の Test 関数が呼び出されますが、CPPDepend はこれを検出せず、コードに到達していないと主張します。「virtual」という単語を CChildClass の Test 関数ヘッダーに追加すると (CParentClass に既にあるものに加えて)、CPPDepend はすべて問題ないと主張します。
基本クラス関数だけでなく、派生クラス関数にも virtual を配置する必要があるのは間違っていると感じているので、誰かがこれに光を当てることができますか?
同様の問題は、派生クラスの CDialog デストラクタでも見られます。派生クラスのデストラクタ宣言に virtual がない場合、CPPDepend は不平を言います。
ご協力いただきありがとうございます。
よろしく
ニール。