当函数返回时,函数中分配的内存是否被释放?

时间:2011-01-25 21:16:48

标签: c++ memory

我有一个使用new关键字分配内存的函数。

该数组从函数返回,但我需要以某种方式释放它。它是在函数返回后释放的,还是由接收代码释放完成后释放数组?

我应该只将这个数组作为成员变量,并在类析构函数中释放它吗?

4 个答案:

答案 0 :(得分:4)

如果使用new明确分配内存,则必须使用delete明确释放内存。返回时将释放局部变量;像vector这样的类可以在幕后进行一些分配,但是他们会为你清理它。

通常,C ++主要允许您选择内存管理模型。您可以坚持使用本地和非指针类成员,并获得基于范围的分配。您可以使用指针和malloc / free或new / delete(但永远不会释放新的指针,反之亦然!)。或者,您可以获取Boost并获取boost::shared_ptr以获取引用计数语义。

答案 1 :(得分:3)

  

我应该只将这个数组作为一个成员变量,并在类解构器中释放它吗?

这通常是一个非常好的主意,但为什么要重新发明轮子呢?只需使用std::vector<T>

答案 2 :(得分:2)

这取决于。您需要定义谁拥有此类对象的所有权。

您可以在函数中分配数组,返回它,让调用者释放它,或者将一个指针放在一个类中,这将破坏析构函数中的指针。

如果此类对象的所有权应该在众多实体中共享,则应使用类似shared_ptr的内容。

我还建议总是使用某种智能指针来处理你的原始指针。

答案 3 :(得分:0)

看看boost::shared_array。它做你需要的。 要么是这样,要么使用std :: vector