gpt4 book ai didi

c++ - 基类没有析构函数,但派生类有。我是否需要寻找与堆无关的陷阱?

转载 作者:行者123 更新时间:2023-12-02 00:18:40 27 4
gpt4 key购买 nike

就继承而言,我知道建议类的析构函数是虚拟的,这样除了任何派生析构函数之外,基类的析构函数也会被正确调用。但是,我想知道在以下场景中是否存在与派生对象相关的任何堆栈相关问题。

假设我们有一个没有析构函数的基类(无论出于何种原因):

class Base{};

以及一个具有析构函数的派生类:

class Derived : public Base
{
~Derived(){}
};

主要是...:

int main()
{
Derived a;
return 0;
}

如果基类没有析构函数,我是否会遇到任何问题?我最初的猜测是编译器只会为基类生成一个默认的析构函数。再说一次,我的问题主要与堆栈而不是动态内存有关:是否有任何奇怪的场景我需要注意,以避免调用派生析构函数而基析构函数不被调用?

最佳答案

您正在考虑的规则是,如果您通过指向其基类型之一的指针删除派生类型的对象,并且该基类型没有虚拟析构函数,则行为是未定义的。此处的代码不会删除任何内容,因此该规则不适用。

关于c++ - 基类没有析构函数,但派生类有。我是否需要寻找与堆无关的陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369945/

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