C++内存管理

前言:哈喽小伙伴们,这篇文章我们将一起来学习C++的内存管理。

C++的内存管理基本完全复用C语言,那C++在C语言的基础上又会有哪些优化和提升呢???


目录

一.内存管理方式

二.malloc/free与new/delete的区别

总结


一.内存管理方式

在C语言中,我们通过malloc、celloc、realloc、free四个函数来动态管理内存。

而在C++中,我们同样可以使用上边的内存管理函数,同时也出现了新的管理方式:

通过new和delete操作符来进行动态内存管理,也就是我们常说的new一个对象

     int* p1 = new int;        //new1个int类型的对象给到p1指针
    delete p1;
    int* p2 = new int[10];        //new10个int类型的对象给到p2指针
    delete[] p2;
    int* p3 = new int(1);        //new1个int类型的对象给到p3并初始化为1
    delete p3;
    int* p4 = new int[10]{1,2,3,4,5,6,7,8,9,10};        //new10个int类型的对象给到p4并初始化
    delete[] p4;

在用法上,new用来开辟空间,delete用来销毁空间new使用起来比malloc等更加方便简洁,并且可以在创建时就初始化

 那么new的好处真的就只是简洁吗???当然不是。

我们之前使用C语言写单链表的时候,是怎么创建新节点的???:

SLLNode* CreatNode(SLLDataType x)
{
	SLLNode* newnode = (SLLNode*)malloc(sizeof(SLLNode));
		if (newnode == NULL)
		{
			perror("CreatNode->malloc");
			exit(-1);
		}
		newnode->data = x;	
		newnode->next = NULL;
		return newnode;
}

代码量非常的多,那我们现在来使用new创建节点:

class SLLNode
{
public:
	SLLNode(int val)
		:_val(val)
		,_next(nullptr)
	{}
private:
	int _val;
	SLLNode* _next;
};
int main()
{
	SLLNode* n1 = new SLLNode(1);
	SLLNode* n2 = new SLLNode(2);
	SLLNode* n3 = new SLLNode(3);
	return 0;
}

写一个单链表的类,并使用列表初始化,这些是创建单链表的基本步骤我们不考虑。

而实际创建新节点就只用main函数中的一行代码

而且我们不用判断创建的节点是否为空,因为编译器会自动为我们抛出异常(日后会讲)。

这样的写法可比malloc简单,而且方便太多了。 


二.malloc/free与new/delete的区别

两种内存管理方式的共同点在于它们都是在堆上申请空间,并且需要手动释放,而不同点在于:

  1. malloc和free是函数,new和delete是操作符
  2. malloc申请空间需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,在[]指定对象的个数即可
  3. malloc的返回值是void*,在使用时必须进行强制类型转换,new不需要
  4. malloc申请空间失败时,返回NULL,因此必须判空,new不需要,但需要补获异常
  5. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数和析构函数,new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理

总结

 C++内存管理的知识相对较少,因为很多都沿用了C语言,所以我们就暂时分享这么多。

喜欢博主文章的小伙伴们记得一键三连哦,我们下期再见!

相关推荐

  1. C/C++——内存管理

    2024-02-10 22:26:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-10 22:26:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-10 22:26:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-10 22:26:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-10 22:26:01       20 阅读

热门阅读

  1. Linux开发:PAM2 配置文件

    2024-02-10 22:26:01       27 阅读
  2. leetcode154 寻找旋转排序数组中的最小值 II

    2024-02-10 22:26:01       33 阅读
  3. 二级C语言笔试6

    2024-02-10 22:26:01       20 阅读
  4. 新概念英语第二册(61)

    2024-02-10 22:26:01       24 阅读
  5. BurpSuite v2024最新版本

    2024-02-10 22:26:01       30 阅读
  6. 二级C语言笔试4

    2024-02-10 22:26:01       26 阅读
  7. 单片机精进之路-4独立按键扫描

    2024-02-10 22:26:01       32 阅读
  8. os模块

    2024-02-10 22:26:01       29 阅读
  9. 脑海模拟法实例场景之--日后创业篇.

    2024-02-10 22:26:01       29 阅读
  10. 蓝桥杯官网练习题(大臣的旅费)

    2024-02-10 22:26:01       29 阅读