我应该在函数中使用 delete[] 吗?

Should i use delete[] in a function?

本文关键字:delete 函数 我应该      更新时间:2023-10-16
void work() {
  int *p;
  p=new int[10];
  //some code....
}

有一个简短的问题,在工作函数中,我应该使用 delete[] 运算符吗? 因为当工作函数结束时,p 将被破坏,哪个是错的还是对的?(我的英语不好,对不起(。

只要代码不抛出异常,这将起作用......

void work() {
    int *p;
    p=new int[10];
    //some code....
    delete [] p;
}

这更好(但难以维护(:

void work1() {
    int *p;
    p=new int[10];
    try {
    //some code....
    } catch(...) {
        delete [] p;
    }
    delete [] p;
}

这好多了...

void work2()
{
    auto p = std::unique_ptr<int[]>(new int[10]);
    // some code...
    // memory is automatically deleted
}

这就是你应该怎么做...

void work3()
{
    auto v = std::vector<int>(10);
    // some code...
}
你是

对的,如果你没有引用函数外部的p,例如全局变量,那么你需要在函数内部调用delete [] p,否则对你想要释放的已分配内存的引用将丢失。

是的,如果使用 new int[10] 分配整数,则需要使用 delete[] 进行清理,因为它是一个数组。

是的,您需要从新内存释放内存。

或者,对于 C++11,您可以使用智能指针:

void work() {
  std::unique_ptr<int[]> p{ new int[10] };
  //some code....
  // RAII will delete[] magically here
}

或者,如果您只使用编译时已知的几个整数(在您的例子中为 10(,则可以执行"正常"或static数组。

void work() {
  /* static */ int p[10];
  //some code....
}

或者,使用 std::vector

void work() {
  std::vector<int> p{10};
  //some code....
  // RAII will delete[] magically here
}

或者,C++11如果数组大小在编译时已知,请使用std::array

void work() {
  std::array<int,10> p;
  //some code....
  // RAII will delete[] magically here
}