这是使用 delete[] 运算符的正确方法吗?
int* a=new int[size];
delete[] a;
如果是,谁(编译器或GC或任何人)将确定新创建的数组的大小?它将在哪里存储数组大小?
谢谢
这是使用 delete[] 运算符的正确方法吗?
int* a=new int[size];
delete[] a;
如果是,谁(编译器或GC或任何人)将确定新创建的数组的大小?它将在哪里存储数组大小?
谢谢
从技术上讲,这种用法是完全有效的。但是,像这样更新数组通常不是一个好主意,您应该使用 std::vector。
对于分配的每个内存块,内存分配器存储块的大小(这就是为什么分配许多小块与分配一个大块相比效率低下的原因)。当delete释放内存时,分配器知道指针指向的内存块有多大。
顺便说一句,每次你想写new T[size]
,你可能应该std::vector<T>
改用。使用指向动态数组的本地指针,在抛出异常的情况下很难保证正确的内存释放。