gpt4 book ai didi

c++ - 以多态方式删除对象

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:17 25 4
gpt4 key购买 nike

Base* optr=new Derived();

delete optr;

我知道如果 Base 类有一个非虚析构函数,那么在删除 optr 指针时只会调用 ~Base() 析构函数。但我发现即使没有调用 ~Derived() 析构函数,派生对象占用的内存也会被释放。所以我的问题是一个对象可以在不调用它的析构函数的情况下被释放吗?

如果答案是,如果我的派生类不包含任何动态分配的变量,那么我是否可以使用非虚拟析构函数,所以我不关心它是否没有被调用?

最佳答案

从标准 C++ 的角度来看,答案很简单:结果是未定义的行为,所以你得到的是完全不可预测的

我有点不明白你为什么要关心。如果您可以从类中消除所有 虚函数,则每个实例都会变得更小(减小 vtable 指针的大小)。但是,将这样的东西用作基类几乎没有意义——要将其用作基类是明智的,您几乎需要在基类中至少有一个虚函数供派生类覆盖。一旦您有了虚函数(任何虚函数),添加更多虚函数基本上是免费的——对象不会通过添加更多虚函数而变得更大。

直接回答你的问题:是的,可以在不调用析构函数的情况下释放内存。真正的问题是当你做到这一点时会发生什么(这个问题真的没有答案)。

关于c++ - 以多态方式删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10177508/

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