是否可以通过有趣的初始化和/或转换为基类来实现具有纯虚方法的抽象类或类的实例?
我正在使用VS14编译器,我想知道编译器是否会错过这个?该类及其用法在单独的程序集中。
要明确我不是想要实现这一点,只是查看错误并想知道这是否会导致调用纯虚方法的运行时异常。
答案 0 :(得分:0)
如果您的程序包含未定义的行为,则可能发生任何事情。
但总的来说,不,不寻常的转换不允许你创建一个抽象基类类型的完整对象。
但是,该错误可能是由于在构造或销毁期间尝试调用纯虚方法(这是UB的一种形式),此时整个对象不存在,因此不会调用相应的最终覆盖。为避免此类问题,通常最好不要为正在构建或销毁的对象调用虚拟方法(直接或间接)。