根据gcc wiki的可见性(https://gcc.gnu.org/wiki/Visibility,请参阅"C++异常问题(请阅读!)"一节),但也看似一个例子(隐藏符号时dynamic_cast失败) ,隐藏类可能会导致有效的dynamic_cast失败.
我想通过例子确切地了解这种情况何时发生:有人能给我一个小例子来正确理解效果吗?
这是我的尝试和理解(在Linux上使用gcc> 7):
据我所知,我需要的是模糊的链接发生,这种情况发生在基类没有密钥方法时.所以我尝试了这个基础层次结构:
class A {
virtual ~A();
virtual void print() = 0;
}
Run Code Online (Sandbox Code Playgroud)
和派生类:
class B : public A {
~B() override;
}
Run Code Online (Sandbox Code Playgroud)
然后我将有两个实现类A_iml,B_impl只打印出他们的名字:
#include "a.hpp"
class AImpl : public A {
~AImpl() override = default;
void print() override { printf("AImpl"); }
}
Run Code Online (Sandbox Code Playgroud)
和
#include "b.hpp"
class BImpl : public B {
~BImpl() override = default;
void print() override { printf("BImpl"); }
} …Run Code Online (Sandbox Code Playgroud)