c++ - Linux 中是否有等同于 _set_pure call handler() 的函数?

标签 c++ c linux gcc gnu

我想用我自己的来覆盖纯虚拟调用的标准处理程序 (__cxa_pure_virtual())。 Windows 的答案是“_set_purecall_handler()”。

Linux/GNU 中是否有类似的工具?

最佳答案

您差点靠自己回答这个问题。这是 gcc/libstdc++-v3/libsupc++/pure.cc__cxa_pure_virtual 的来源:

extern "C" void
__cxxabiv1::__cxa_pure_virtual (void)
{
  writestr ("pure virtual method called\n");
  std::terminate ();
}

因此,没有直接等同于带有 GCC 的 Microsoft 的 _set_purecall_handler。但是,由于此函数调用了 std::terminate,因此您可以使用 std::set_terminate 来设置在打印消息后调用的处理程序。

另一种可能的解决方案是提供您自己的 __cxxabiv1::__cxa_pure_virtual 定义来覆盖库函数。像这样:

namespace __cxxabiv1 {
        extern "C" void
        __cxa_pure_virtual(void) {
                char const msg[] = "my pure virutal\n";
                write(2, msg, sizeof msg - 1);
                std::terminate();
        }
}

关于c++ - Linux 中是否有等同于 _set_pure call handler() 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510452/

相关文章:

c - double和float的比较,以及隐式转换

linux - FSCK“意外不一致;手动运行 fsck”的解决方法

java - 我可以使用什么将 Java 连接到 Video4Linux?

linux - bin/sh/1 arm-linux-gnueabi-g++ 在 eclipse 中找不到

再次调用构造函数时修改对象的C++私有(private)成员

c - 为什么在 stdbool.h 中使用整数而不是无符号整数?

c - 在 linux 中写入串口

c++ - 调用父控件函数

c++ - 以编程方式获取上次重启的日期/时间

c++ - 将颜色映射到间隔