【发布时间】:2021-04-02 11:54:18
【问题描述】:
我有以下文件foobar.cc:
struct Foo
{
virtual int do_something() const = 0;
};
struct Bar : public Foo
{
virtual int do_something() const override
{ return 1; }
};
Bar bar;
当我尝试用它构建一个共享对象时:
g++ -shared -fPIC foobar.cc -o foobar.so
nm foobar.so 输出行:
U _ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
U _ZTVN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3
但是为什么呢?难道只有当其中一个虚函数不是纯函数或没有定义时才会出现这种情况?我知道我可以通过使用fno-rtti 进行编译来规避这种情况,但我正在尝试理解这种行为。
【问题讨论】:
-
Foo *fp = new Bar; Bar *bp = dynamic_cast<Bar*>(fp);.