当变量是本地变量时是否需要删除?

时间:2012-09-15 23:58:17

标签: c++

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

无论如何都不会在函数返回后自动删除它?

3 个答案:

答案 0 :(得分:8)

是的,有必要:如果您使用newnew[]在动态存储上分配内容,编译器不知道您在计算函数返回后没有计划传递已分配的对象,因此您有责任致电delete(或delete[])释放您已分配的对象。

您可以使用unique_ptr<T>来避免明确调用delete,但会代表您unique_ptr<T>的析构函数进行调用。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

是,是的,是的,是的,是的。除非您使用auto_ptrboost::shared_ptr等智能指针,否则必须使用delete来释放内存。

因为new在堆上分配(不依赖于当前堆栈帧),所以当C ++破坏当前堆栈帧时,内存不会被处理。如果您使用new,则始终必须使用delete。周期。