我应该在函数中使用 delete[] 吗?
Should i use delete[] in a function?
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
}
相关文章:
- 析构函数和'delete'之间的区别
- 析构函数中的"delete this"
- 析构函数是否会自动调用 delete[] C++?
- 将复制构造函数设置为private和=delete有什么区别
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 继承 =delete 函数
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- 我们什么时候应该在 C++ 中将析构函数声明为 =DELETE
- 在析构函数中使用 delete[]:为 RtlValidateHeap 指定的地址无效
- 将复制构造函数超载与DELETE,然后调用C 子类的默认构造函数
- delete[]调用析构函数时出现内存错误
- 我应该在函数中使用 delete[] 吗?
- 虚拟析构函数和delete关键字
- Delete导致基类中的虚拟析构函数出现内存错误
- c++析构函数调用一个delete运算符
- 将 delete 作为运算符或函数调用是否有任何区别
- 析构函数调用delete函数时程序崩溃
- delete[]函数在C++中无法正常工作
- std::unique_ptr<T[]> 使用派生对象数组,使用 delete 函数
- 如何对类对象使用delete函数