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)有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

new/delete与malloc/free的区别

关于c++中new和delete

new &&delete

关于C语言free函数的问题

C++ new和delete运算符简介

C语言中free函数的用法