我有一个使用new
关键字分配内存的函数。
该数组从函数返回,但我需要以某种方式释放它。它是在函数返回后释放的,还是由接收代码释放完成后释放数组?
我应该只将这个数组作为成员变量,并在类析构函数中释放它吗?
答案 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