小编Mar*_*tin的帖子

由于隐藏符号,dynamic_cast何时失败?

根据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)

c++ gcc visibility

6
推荐指数
1
解决办法
273
查看次数

标签 统计

c++ ×1

gcc ×1

visibility ×1