抱歉,如果已经问过这个问题,但我很难搜索析构函数和访问冲突 =)
这是场景的 C++ 伪代码:
在 DLL1 中(使用 /MT 编译)
class A
{
public:
virtual ~A() <== if "virtual" is removed, everthing works OK
{
}
}
class B : public A
{
public:
__declspec( dllexport ) ~B() // i did try without exporting the destructor as well
{
} <== Access Violation as it returns (if fails in assembly at delete operator...)
}
在链接到 DLL1 的 DLL2 中
main()enter code here
{
B* b = new B();
delete b; <== Access Violation
}
到底是怎么回事?我是不是脑子有问题?如果我将 A 的析构函数设为非虚拟的,那么一切正常——甚至 A 和 B 的析构函数也被调用(好像 A 的析构函数是虚拟的——这是因为它是公共的吗?)。
不过,我的主要问题是 - 为什么当基类的析构函数被声明为虚拟时会出现访问冲突?