如果我有这样的功能:
void MyFunctoin(int size){
// ...
int *arr=new int[size];
// ...
}
Run Code Online (Sandbox Code Playgroud)
delete?标题问题的答案很简单:是的,每个问题new必须与a匹配delete.在你的情况下,因为你使用过new[],必须有一个delete[]地方.
但你不需要自己写.使用管理自己资源的类通常要好得多.在你的情况下,你最好使用STL容器,如array<>或vector<>.这是:
std::array<int, size> arr; // fixed size (known at compile time)
Run Code Online (Sandbox Code Playgroud)
要么
std::vector<int> arr; // variable size
Run Code Online (Sandbox Code Playgroud)
在vector,所有必要的调用new和delete在容器内完成,你不需要关心它们.
你可以这样编写你的函数:
#include <vector>
void MyFunctoin(int size){
// ...
std::vector<int> arr(size);
// ...
}
Run Code Online (Sandbox Code Playgroud)
并且不会有任何内存泄漏,无需在delete任何地方调用.如果您不想要,则无需size在构造时指定arr.
是的.使用smart pointers/ STL containers(例如std::vector/ boost::shared_array/ std::unique_ptr<T[]>在您的情况下).
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |