小工具知识网

当前位置: 首页 > 行业知识 > 【C++干货铺】内存管理new和delete

行业知识

【C++干货铺】内存管理new和delete

2026-10-23 23:32:43 来源:互联网转载

=========================================================================

个人主页���击直达:小白不是程序媛

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怎么注册域名