草庐IT

c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?

coder 2023-06-01 原文

这在 C++ 中无法编译:

class A
{
};

class B : public A
{
};

...

A *a = new B();
B *b = dynamic_cast<B*>(a);

最佳答案

因为 dynamic_cast 只能向下转换多态类型,所以标准这么说。

您可以通过向基类添加 virtual 析构函数来使您的类具有多态性。事实上,你可能应该无论如何(见脚注)。否则,如果您尝试通过 A 指针删除 B 对象,您将调用 Undefined Behavior .

class A
{
public:
  virtual ~A() {};
};

瞧!

脚注

关于在多态类型中需要虚拟析构函数的“规则”有一些异常(exception)。
一个这样的异常(exception)是使用 boost::shared_ptr 正如 Steve Jessop 在下面的评论中指出的那样。有关何时需要虚拟析构函数的更多信息,请阅读 Herb Sutter文章。

关于c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227328/

有关c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?的更多相关文章

随机推荐