gpt4 book ai didi

c++ - 使用堆栈指针删除派生类?

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

所以堆栈内存不能通过删除手动释放,因为这不知何故会导致UB。但是在创建派生类对象时,涉及到“new”关键字。比如说:

void some_function(){
Base* base;
base = new Derived;
}

由于涉及“new”,base = new Derived 现在是否位于堆上?如果是这样,它所在的内存是否需要再次手动释放?或者它位于堆栈中,并且在程序终止后内存将被释放?

最佳答案

规则是:任何时候使用new,都必须使用delete 释放内存。唯一的异常(exception)是名为“放置 new”,很少使用(见评论)。

在您的例子中,名为base指针 本身位于堆栈中。但是,它指向的是在堆上分配的。

当您的程序终止时,内核将释放所有 的内存。内存在何处或如何分配并不重要。

(学究们请注意:我在这里根据常用用法使用“堆栈”和“堆”,尽管事实上 C++ 标准中并未提及这些术语。)

关于c++ - 使用堆栈指针删除派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29380023/

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