如果我要使用“new”为函数中的本地字符数组分配新内存,是否有必要在函数返回之前使用 delete?
反正函数返回后不会自动删除吗?
是的,这是必要的:如果您使用new
or在动态存储中分配某些东西new[]
,编译器不知道您没有计划在函数返回后传递分配的对象,因此您有责任调用delete
(or delete[]
) 来释放您已分配的对象。
您可以使用unique_ptr<T>
来避免delete
显式调用,但调用将由析构函数unique_ptr<T>
代表您进行。
是的,分配的变量在函数返回时new
不会自动释放,仍然需要删除。
是的,是的,是的,是的,是的,是的。除非您使用诸如auto_ptr
or之类的智能指针,否则boost::shared_ptr
您必须使用它delete
来释放内存。
因为new
在堆上分配,不依赖于当前堆栈帧,所以当 C++ 销毁当前堆栈帧时,不会释放内存。如果你使用new
,你总是必须使用delete
。时期。