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