C++纯虚函数调用不会抛出运行时异常?

Tro*_*yvs 1 c++ virtual function call pure-virtual

据说在C++的构造函数中,只要对象还没有构造完成,就不应该调用虚函数,否则会抛出“纯虚函数调用错误”。所以我尝试了这个:

#include<stdio.h>
class A{
    virtual void f() = 0;
};

class A1 : public A{
public:
    void f(){printf("virtual function");}
    A1(){f();}
};
int main(int argc, char const *argv[]){
    A1 a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Windows 上用 g++ 编译它,它可以工作并打印

virtual function
Run Code Online (Sandbox Code Playgroud)

那么如何让我的程序抛出“纯虚函数调用”异常呢?

谢谢!

Rem*_*eau 7

您没有收到“纯虚拟方法调用”异常,因为A::f()没有被调用。

A1的构造函数正在调用它自己的方法,这在的构造A1::f()过程中是完全安全的。A1

在构造函数中调用虚拟方法的问题与调用派生类方法的基类构造函数有关,这不起作用,因为正在构造的对象的派生部分尚不存在。

因此,要获得所需的异常,您需要调用f()inA的构造函数而不是 inA1的构造函数。