如果我在使用“new”的函数中为本地字符数组分配新内存,是否有必要在函数返回之前使用delete?
无论如何都不会在函数返回后自动删除它?
答案 0 :(得分:8)
是的,有必要:如果您使用new
或new[]
在动态存储上分配内容,编译器不知道您在计算函数返回后没有计划传递已分配的对象,因此您有责任致电delete
(或delete[]
)释放您已分配的对象。
您可以使用unique_ptr<T>
来避免明确调用delete
,但会代表您unique_ptr<T>
的析构函数进行调用。
答案 1 :(得分:3)
是的,当函数返回时,new
分配的变量不会自动释放,并且仍然需要删除。
答案 2 :(得分:2)
是,是的,是的,是的,是的。除非您使用auto_ptr
或boost::shared_ptr
等智能指针,否则必须使用delete
来释放内存。
因为new
在堆上分配(不依赖于当前堆栈帧),所以当C ++破坏当前堆栈帧时,内存不会被处理。如果您使用new
,则始终必须使用delete
。周期。