我需要从c ++中的本地指针释放分配的内存吗?

问题描述 投票:0回答:1
void f() {
int *ptr = new int;
// is the following line necessary?
delete ptr;
}

int main() {
f();
return 0;
}

我是否必须释放函数f中分配的内存,还是因为不再有对该内存的引用而自动释放了它?

c++ pointers
1个回答
2
投票

我需要从c ++中的本地指针释放分配的内存吗?

如果要避免内存泄漏-并且应该-则应分配所有分配的内容。每分配一个新对象都应删除一个。

或者它是否自动释放

动态分配不会自动释放。

因为不再有对该内存的引用了?

是否引用了内存与内存是否已释放无关。如果动态内存没有被任何东西引用,则说明内存已泄漏。 C ++没有垃圾回收。

某些类确实分配了内存并在销毁它们时释放了该分配。这种模式称为RAII。指针不是类,并且没有析构函数。指针生命周期的结束对指向的对象没有影响。


您应避免使用裸机拥有的指针。我建议使用RAII容器或智能指针(实际上不是指针,而是类)来管理内存。另外,避免在不需要时进行动态分配。

© www.soinside.com 2019 - 2024. All rights reserved.