如果不使用删除,是否会在函数末尾释放内存?

时间:2013-04-18 23:06:05

标签: c++ memory new-operator delete-operator

假设您有以下功能:

void foo()
{
  char* pt = new char[10];
  //do stuff with pt
}

由于指针是在本地创建的,一旦函数终止,是否会释放内存?或者你真的需要使用delete[]来释放记忆吗?

5 个答案:

答案 0 :(得分:6)

使用new / new[]分配的内存具有动态存储持续时间。在用户明确调用delete / delete[]之前,不会取消分配。

答案 1 :(得分:2)

如果在不使用某种智能指针类的情况下使用“new”或“new []”,内存将自动释放。你需要适当地调用“删除”或“删除[]”来释放它。

答案 2 :(得分:1)

不 - 这是内存泄漏。每个new应该有相应的delete(并且每个new[]都应该有相应的delete[]

答案 3 :(得分:1)

是的,你肯定需要delete[]。它可能在同一个函数中或其他位置(如果您选择返回pt)。

如果您使用容器,例如vector,然后你没有

std::vector< char > pt( 10 );

答案 4 :(得分:0)

您确实需要使用delete[]