Entwicklungsumgebung: GNU GCC (g ++) 4.1.2
Während ich versuche zu untersuchen, wie die Codeabdeckung - insbesondere die Funktionsabdeckung - beim Komponententest erhöht werden kann, habe ich festgestellt, dass ein Teil der Klasse dtor anscheinend mehrmals generiert wird. Haben einige von Ihnen eine Idee, warum, bitte?
Ich habe versucht und beobachtet, was ich oben erwähnt habe, indem ich den folgenden Code verwendet habe.
In "test.h"
class BaseClass
{
public:
~BaseClass();
void someMethod();
};
class DerivedClass : public BaseClass
{
public:
virtual ~DerivedClass();
virtual void someMethod();
};
In "test.cpp"
#include <iostream>
#include "test.h"
BaseClass::~BaseClass()
{
std::cout << "BaseClass dtor invoked" << std::endl;
}
void BaseClass::someMethod()
{
std::cout << "Base class method" << std::endl;
}
DerivedClass::~DerivedClass()
{
std::cout << "DerivedClass dtor invoked" << std::endl;
}
void DerivedClass::someMethod()
{
std::cout << "Derived class method" << std::endl;
}
int main()
{
BaseClass* b_ptr = new BaseClass;
b_ptr->someMethod();
delete b_ptr;
}
Wenn ich den obigen Code erstellt habe (g ++ test.cpp -o test) und dann sehe, welche Art von Symbolen wie folgt generiert wurden:
nm - Entwirrungstest
Ich konnte die folgende Ausgabe sehen.
==== following is partial output ====
08048816 T DerivedClass::someMethod()
08048922 T DerivedClass::~DerivedClass()
080489aa T DerivedClass::~DerivedClass()
08048a32 T DerivedClass::~DerivedClass()
08048842 T BaseClass::someMethod()
0804886e T BaseClass::~BaseClass()
080488f6 T BaseClass::~BaseClass()
Meine Fragen lauten wie folgt.
1) Warum wurden mehrere Dtoren generiert (BaseClass - 2, DerivedClass - 3)?
2) Was ist der Unterschied zwischen diesen Dtoren? Wie werden diese mehreren Dtoren selektiv verwendet?
Ich habe jetzt das Gefühl, dass wir dies verstehen müssen, um eine 100% ige Funktionsabdeckung für C ++ - Projekte zu erreichen, damit ich alle diese Dtoren in meinen Komponententests aufrufen kann.
Ich würde mich sehr freuen, wenn mir jemand die Antwort auf das oben Gesagte geben könnte.