gpt4 book ai didi

c++ - 堆栈跟踪中的 "pure virtual"调用是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 23:33:06 25 4
gpt4 key购买 nike

我的服务崩溃了,我得到了这个堆栈跟踪。我无法从这里推断出任何东西

00007f859cd27834 __gnu_cxx::__verbose_terminate_handler()
@ 00007f859cd25865 __cxxabiv1::__terminate(void (*)())
@ 00007f859cd25892 std::terminate()
@ 00007f859cd263be __cxa_pure_virtual
@ 0000000001996f9f My::Class::~Class()

有人能帮忙吗?

最佳答案

如果实际上调用了“纯虚拟”函数,就会发生这种情况,这会导致崩溃。

纯虚函数是这样声明的:

virtual void pureVirtualFunction() = 0;

通常编译器会检测你是否忽略了纯虚函数的实现。但在某些情况下它不能。

基类构造函数中纯虚函数的调用

一个常见的问题是来自类的基类构造函数的函数调用:

MyClass::MyClass() { 
pureVirtualFunction(); // Call of pure virtual function from base constructor.
}

在基本解构器中调用纯虚函数

或者从基类的析构函数中调用纯虚方法:

MyClass::~MyClass() { 
pureVirtualFunction(); // Call of pure virtual function from base deconstructor.
}

共享指针的前向声明(以及类似的)

如果你像这样使用前向声明,还有另一种常见情况:

class MyClass;
typedef std::shared_ptr<MyClass> MyClassPtr;

这种共享指针的对象可以在很多地方销毁,但是编译器缺少如何调用类的析构函数所需的信息。确保您阅读编译器的所有警告,它会警告这个问题(以及调用纯虚拟方法的许多其他问题。)

对于这种特殊情况,请确保避免共享指针的前向声明,并仅将它们包含在类声明中(如果可能)。

另见 answer .

关于c++ - 堆栈跟踪中的 "pure virtual"调用是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com