提问人:Troskyvs 提问时间:6/19/2022 最后编辑:General GrievanceTroskyvs 更新时间:6/27/2022 访问量:336
C++ 纯虚函数调用不会抛出运行时异常?[复制]
C++ pure virtual function call doesn't throw run-time exception? [duplicate]
问:
据说在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;
}
在 Windows 上使用 G++ 编译它,它可以工作并打印
virtual function
那么如何让我的程序抛出“纯虚函数调用”异常呢?
谢谢!
答:
7赞
Remy Lebeau
6/19/2022
#1
您没有收到“纯虚拟方法调用”异常,因为未被调用。A::f()
A1
的构造函数正在调用自己的方法,这在构造过程中是完全安全的。A1::f()
A1
在构造函数中调用虚拟方法的问题与调用派生类方法的基类构造函数有关,该方法不起作用,因为正在构造的对象的派生部分尚不存在。
因此,要获得所需的异常,您需要调用 的构造函数而不是 的构造函数。f()
A
A1
评论
A1::f()
f()
A1