VS c++编译器会错过一个抽象类的实例化吗?



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

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

要明确的是,我并没有试图实现这一点,只是查看bug,并想知道这是否会导致调用纯虚拟方法的运行时异常。

如果你的程序包含未定义行为,那么任何事情都可能发生。

但是一般来说,不,不寻常的强制转换将不允许您创建抽象基类类型的完整对象。

然而,该错误可能是由于在构造或销毁(这是UB的一种形式)期间试图调用纯虚方法而引起的,此时完整的对象不存在,因此没有调用适当的最终重写。为避免此类问题,通常最好不要(直接或间接)为正在构造或销毁的对象调用虚方法。

最新更新