最佳答案
开发环境: GNU GCC (g + +)4.1.2
当我试图研究如何在单元测试中增加“代码覆盖率——特别是函数覆盖率”时,我发现一些类 dtor 似乎被多次生成。你们有人知道为什么吗?
通过使用下面的代码,我尝试并观察了上面提到的内容。
在“ test.h”里
class BaseClass
{
public:
~BaseClass();
void someMethod();
};
class DerivedClass : public BaseClass
{
public:
virtual ~DerivedClass();
virtual void someMethod();
};
在“ 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;
}
当我构建上面的代码(g + + test.cpp-o test)并查看生成的符号类型如下所示时,
Nm ——爆破试验
我可以看到以下输出。
==== 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()
我的问题如下。
1)为什么生成了多个 dtor (BaseClass-2,DeridedClass-3) ?
2)这些医生之间有什么区别? 如何选择性地使用这些多名医生?
我现在有一种感觉,为了实现 C + + 项目100% 的函数覆盖率,我们需要理解这一点,这样我就可以在单元测试中调用所有这些 dtor。
如果有人能就上述问题给我答复,我将不胜感激。