c++ - __cxa_pure_virtual 的目的是什么?

标签 c++ avr-gcc pure-virtual

在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:

undefined reference to `__cxa_pure_virtual'

我找到了 this document其中指出:

The __cxa_pure_virtual function is an error handler that is invoked when a pure virtual function is called.

If you are writing a C++ application that has pure virtual functions you must supply your own __cxa_pure_virtual error handler function. For example:

extern "C" void __cxa_pure_virtual() { while (1); }

按照建议定义此函数可修复错误,但我想知道:

  • 这个功能的目的是什么,
  • 为什么我需要自己定义它
  • 为什么可以将其编码为无限循环?

最佳答案

如果在程序运行时的任何地方创建了一个未填充虚函数指针的对象,并且当调用相应的函数时,您将调用“纯虚函数”。

您描述的处理程序应该在您的开发环境附带的默认库中定义。如果您碰巧省略了默认库,您会发现此处理程序未定义:链接器看到一个声明,但没有定义。这就是您需要提供自己的版本的时候。

无限循环是可以接受的,因为它是一个“响亮”的错误:您软件的用户会立即注意到它。任何其他“大声”实现也是可以接受的。

关于c++ - __cxa_pure_virtual 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016303/

相关文章:

c++ - 将 short 分配给数组中的 unsigned char 的结果是什么?

c++ - 在构造期间抛出 bad_alloc 时如何实现正确的堆栈展开和 raii

build - 了解MSYS2下的LD

c - 系统调用在 Atmel AVR Studio(带 ASF)中不起作用

avr - AVR-GCC 是否可以与 16 位 AVR I/O 寄存器一起正常工作?

c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?

C++ 多重继承和纯函数

c++ - 使用 unique_ptr 的常量字符指针

C++-为什么这里需要 'template'关键字?

c++ - boost-python纯虚拟检测缺失实现