SIM*_*MEL 34 c++ memory-management
我已经写了包含两个指针类,一个是char* color_和一个在vertexesset* vertex_那里vertexesset是一类我创建.在我开始写的destractor中
delete [] color_;
delete [] vertex_;
Run Code Online (Sandbox Code Playgroud)
当它来到析构函数时,它给了我一个分段错误.
然后我将析构函数更改为:
delete [] color_;
delete vertex_;
Run Code Online (Sandbox Code Playgroud)
现在它工作正常.两者有什么区别?
eta*_*ion 59
你delete []当你new编一个数组类型,delete当你没有.例子:
typedef int int_array[10];
int* a = new int;
int* b = new int[10];
int* c = new int_array;
delete a;
delete[] b;
delete[] c; // this is a must! even if the new-line didn't use [].
Run Code Online (Sandbox Code Playgroud)
https://isocpp.org/wiki/faq/freestore-mgmt
如果使用operator new [](例如动态数组)在堆上分配内存,则必须使用delete [].
如果使用operator new,则必须使用operator delete,而不使用方括号.
它与删除内置类型或自定义类无关.
| 归档时间: |
|
| 查看次数: |
27278 次 |
| 最近记录: |