delete[] p->elems和free(p->elems)有什么区别?
Posted irrationality
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delete[] p->elems和free(p->elems)有什么区别?相关的知识,希望对你有一定的参考价值。
delete[]
和free()
都是释放内存的函数,但它们具有不同的使用方法和适用情况。
delete[]
通常用于释放C++中动态分配的数组空间。在使用new[]
运算符分配内存时,应使用delete[]
运算符来释放分配的内存。delete[]
运算符会调用每个数组元素的析构函数,然后释放整个数组所占用的内存。因为 delete[]
运算符会自动计算并释放整个数组所占用的内存空间,因此在释放数组指针时无需指定数组占用的空间大小。
例如,在 C++ 中,释放一个字符数组可以使用以下语句:
char* str = new char[100];
delete[] str;
而 free()
函数则是释放 C 标准库中动态分配的内存空间所使用的函数。与delete[]
不同,free()
不会调用析构函数,因此只适用于释放动态分配的原始内存,而不适用于 C++ 对象。使用 free()
函数需要指定所释放空间的大小,格式如下:
#include<stdlib.h>
void* free(void* ptr);
例如,在 C 语言中,释放一个字符数组可以使用以下语句:
char* str = (char *)malloc(100*sizeof(char));
free(str);
总之,delete[]
函数和free()
函数虽然用于释放内存,但它们适用的情况有所不同。在 C++ 中,应该优先使用delete[]
来释放动态分配的数组空间,因为它能够自动调用析构函数并释放整个数组占用的内存空间。而在 C 语言中,则应该优先使用free()
函数来释放动态分配的空间。
内存管理 相关宏
CC_SAFE_DELETE(p) 使用delete操作符删除一个C++对象p,如果p为NULL,则不进行操作
CC_SAFE_DELETE_ARRAY(p) 使用delete[]操作符删除一个C++数组p,如果p为NULL,则不进行操作
CC_SAFE_FREE(p) 使用free()函数删除p,如果p为NULL,则不进行操作
CC_SAFE_RELEASE(p) 使用release()方法释放Cocos2d-x对象p的一次引用,如果p为NULL,则不进行操作
CC_SAFE_RELEASE_NULL(p) 使用release()方法释放Cocos2d-x对象p的一次引用,再把p赋值为NULL。如果p已经为NULL,则不进行操作
CC_SAFE_RETAIN(p) 使用reatin()方法增加Cocos2d-x对象p的一次引用。如果p为NULL,则不进行操作
以上是关于delete[] p->elems和free(p->elems)有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章