VS C ++编译器是否会错过抽象类的实例化

时间:2016-11-01 21:09:24

标签: c++ visual-studio msbuild

是否可以通过有趣的初始化和/或转换为基类来实现具有纯虚方法的抽象类或类的实例?

我正在使用VS14编译器,我想知道编译器是否会错过这个?该类及其用法在单独的程序集中。

要明确我不是想要实现这一点,只是查看错误并想知道这是否会导致调用纯虚方法的运行时异常。

1 个答案:

答案 0 :(得分:0)

如果您的程序包含未定义的行为,则可能发生任何事情。

但总的来说,不,不寻常的转换不允许你创建一个抽象基类类型的完整对象。

但是,该错误可能是由于在构造或销毁期间尝试调用纯虚方法(这是UB的一种形式),此时整个对象不存在,因此不会调用相应的最终覆盖。为避免此类问题,通常最好不要为正在构建或销毁的对象调用虚拟方法(直接或间接)。