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

标签 c++ memory derived-class

所以堆栈内存不能通过删除手动释放,因为这不知何故会导致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/

相关文章:

c# - 带指针的 PInvoke - C++ 到 C#

c++ - boost multi_index 是如何实现的

java - 如何在派生类中重新定义常量变量? [JAVA]

派生类的python构造函数

c# - 增强派生功能的基类方法 - 减少代码

c# - 有人可以破译 timeGetTime() 或 QueryPerformanceCounter/QueryPerformanceFrequency 是否具有较低的开销或/和准确性?

c++ - 关于数组大小计算

Java gc 不会自动清理内存

android - 分配游标时内存不足

c++ - 迭代器是否分配指针等内存?