2

如果我要使用“new”为函数中的本地字符数组分配新内存,是否有必要在函数返回之前使用 delete?

反正函数返回后不会自动删除吗?

4

3 回答 3

8

是的,这是必要的:如果您使用newor在动态存储中分配某些东西new[],编译器不知道您没有计划在函数返回后传递分配的对象,因此您有责任调用delete(or delete[]) 来释放您已分配的对象。

您可以使用unique_ptr<T>来避免delete显式调用,但调用将由析构函数unique_ptr<T>代表您进行。

于 2012-09-15T23:59:35.383 回答
3

是的,分配的变量在函数返回时new 不会自动释放,仍然需要删除。

于 2012-09-16T00:00:23.093 回答
2

是的,是的,是的,是的,是的,是的。除非您使用诸如auto_ptror之类的智能指针,否则boost::shared_ptr您必须使用它delete来释放内存。

因为new在堆上分配,不依赖于当前堆栈帧,所以当 C++ 销毁当前堆栈帧时,不会释放内存。如果你使用new,你总是必须使用delete。时期。

于 2012-09-16T00:01:53.583 回答