C++内存管理(new和delete)

目录

1.C++的内存分布

2.C++内存管理方式


1.C++的内存分布

在内存里面是分好几个区的

1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。
2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口
创建共享共享内存,做进程间通信
3. 堆用于程序运行时动态内存分配,堆是可以上增长的。
4. 数据段--存储全局数据和静态数据。
5. 代码段--可执行的代码/只读常量

2.C++内存管理方式

提到C++的内存管理方式,我们不得不先提到C语言的内存管理方式malloc/calloc/realloc/free

C语言:(malloc、free、calloc、realloc)函数讲解-CSDN博客

C++的内存管理方式:new/delete(操作符

为什么有了malloc/calloc/realloc/free,还要new/delete呢?

我们来看看malloc/calloc/realloc/free和new/delete有什么区别

new和delete的使用方法

我们看如下代码

复制代码
#include<iostream>
using namespace std;
class A
{
public:
	A(int a = 0)
		: _a(a)
	{
		cout << "A():" << this << endl;
	}
	~A()
	{
		cout << "~A():" << this << endl;
	}
private:
	int _a;
};
int main()
{
	// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间
	//还会调用构造函数和析构函数
	A* p1 = (A*)malloc(sizeof(A));
	//A* p2 = new A(1);
	free(p1);
	//delete p2;

	// 内置类型是几乎是一样的
	int* p3 = (int*)malloc(sizeof(int)); 
	int* p4 = new int;
	free(p3);
	delete p4;

	A* p5 = (A*)malloc(sizeof(A) * 10);
	A* p6 = new A[10];
	free(p5);
	delete[] p6;

	return 0;
}

1.我们可以看出****在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会

1.new和delete解决了动态申请自定义类型初始化问题

2.相比于malloc/free简化了用法

相关推荐
森G2 小时前
29、QStringListModel 和 QListView---------Model/View模型视图
c++·qt
0xDevNull8 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮018 小时前
Next.js基础
开发语言·前端·javascript
ALex_zry8 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
Amumu121389 小时前
Js:正则表达式(二)
开发语言·javascript·正则表达式
学嵌入式的小杨同学9 小时前
STM32 进阶封神之路(三十二):SPI 通信深度实战 —— 硬件 SPI 驱动 W25Q64 闪存(底层时序 + 寄存器配置 + 读写封装)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
Sgf2279 小时前
ES8(ES2017)新特性完整指南
开发语言·javascript·ecmascript
好大哥呀9 小时前
C++ Web 编程
开发语言·前端·c++
ID_1800790547310 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
Mr_Xuhhh10 小时前
LeetCode hot 100(C++版本)(上)
c++·leetcode·哈希算法