行业知识
【C++干货铺】内存管理new和delete
=========================================================================
个人主页���击直达:小白不是程序媛
C++系列专栏:C++干货铺
代码仓库:Gitee
=========================================================================
目录
C语言中动态内存管理方式
malloc/calloc/realloc的区别?
C++内存管理的方式
内置类型
自定义类型
operator new 和 operator delete 函数
operator new
operator delete
new和delete的实现原理
内置类型
new的原理
delete的原理
new T[N]的原理
delete[]的原理
定位new表达式(placement-new)
malloc/free和new/delete的区别
内存泄漏
什么是内存泄漏,内存泄漏的危害
内存泄漏分类
如何避免内存泄漏
C语言中动态内存管理方式
内存开辟函数:
malloc/cealloc/realloc
内存销毁函数:
free
int main(){//mallocint* ptr = (int*)malloc(sizeof(int) * 10);free(ptr);//callocint* ptr2 = (int*)calloc(4, sizeof(int));//reallocint* ptr3 = (int*)realloc(ptr2, sizeof(int) );free(ptr3);return 0;} malloc/calloc/realloc的区别?
malloc
void* malloc (size_t size);
分配大小为字节的内存块,返回指向块开头的指针。新分配的内存块的内容不会初始化,而是保留不确定的值。如果 size 为零,则返回值取决于特定的库实现(它可能是也可能不是 null 指针),但返回的指针不应被取消引用。
calloc
void* calloc (size_t num, size_t size);
为 num 元素数组分配一个内存块,每个元素的大小为字节长,并将其所有位初始化为零。有效的结果是分配一个零初始化的 (num*size) 字节内存块。如果 size 为零,则返回值取决于特定的库实现(它可能是也可能不是 null 指针),但返回的指针不应被取消引用。
realloc
void* realloc (void* ptr, size_t size);
更改 ptr 指向的内存块的大小。即使将内存块移动到新位置,内存块的内容也会保留到新旧大小中的较小者。如果新大小较大,则新分配部分的值不确定。如果 ptr 是空指针,则该函数的行为类似于 malloc,分配一个新的大小字节块并返回指向其开头的指针。
更多C语言动态内存函数移步至此:
动态内存管理_小白不是程序媛的博客-CSDN博客https://blog.csdn.net/qq_55119554/article/details/131737338
C++内存管理的方式
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因
此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。
内置类型
//内置类型int main(){//动态申请一个int类型的空间int* p = new int;//销毁动态申请的空间delete p;//动态申请一个int类型的空间并初始化为 0int* p2 = new int(0);delete p2;//动态申请10个int类型的空间int* p3 = new int[10];delete p3;//动态申请10个int类型的空间并将前三个元素初始化为1,2,3 剩下的初始化为 0int* p4 = new int[10] { 1,2,3 };delete p4;return 0;}
注意:
申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用
new[]和delete[],注意:匹配起来使用。
自定义类型
//自定义类型class A{public:A(int a=1):_a(a){cout
上一篇:小腿骨疼解析,常见原因及应对方法
下一篇:uk怎么注册域名