gpt4 book ai didi

c++ - 以下哪种情况需要虚拟析构函数?

转载 作者:行者123 更新时间:2023-11-27 22:59:10 25 4
gpt4 key购买 nike

案例一:

基类有一个动态分配的变量,但派生类没有,然后我做了:

Base* p = new Derived;
delete p;

案例二:

基类和派生类都有动态分配的变量(派生类除了继承的变量外还有额外的动态分配的变量)。再一次,我这样做:

Base* p = new Derived;
delete p;

案例三:基类没有动态分配的变量,但派生类有。我再次这样做:

Base* p = new Derived;
delete p;

Case-4:基类和派生类都没有任何动态分配的变量。我再次这样做:

Base* p = new Derived;
delete p;

或者如果忽略 virtual 关键字,是否在所有情况下都会导致未定义的行为?

最佳答案

全部。

如果您使用与实际对象类型不同的指针delete,除非析构函数是虚拟的,否则编译器不知道如何正确执行此操作。那时你会得到未定义的行为,即使它看起来工作正常。

关于c++ - 以下哪种情况需要虚拟析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com