欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++内存管理详解使用方式

时间:2023-03-13 12:12:35|栏目:C代码|点击:

c++中内存管理的方式

在c语言中,我们拥有malloc和free等函数可以对内存进行动态管理

但是总体来说不是很方便,所以c++拥有了一种新的方式来对内存进行管理:通过new和delete操作符来对内存进行动态分配

new和delete操作符的使用方式

new操作符的使用方式:

#include<iostream>
using namespace std;
class A
{};
 
int main()
{
	int* p = new int(2);	//动态分配一个int类型的空间,还可以将它初始化
	int* p1 = new int[10];	//动态分配一个数组
	A* p2 = new A;	//动态分配一个类
	return 0;
}

delete操作符的使用方式:

#include<iostream>
using namespace std;
class A
{};
int main()
{
	int* p = new int(2);
	int* p1 = new int[10];	
	A* p2 = new A;	
	delete p;	//销毁p
	delete[] p1;	//销毁p1
	delete p2;	//销毁p2
	return 0;
}

注意:

1、对于自定义类型,new和delete会自动调用构造函数和析构函数对创建出的对象进行初始化,也可以显示的写出想要被初始化的值,而malloc和free不会

#include<iostream>
using namespace std;
class A
{
public:
	A(int x = 1) :_x(x) {}
private:
	int _x;
};
int main()
{
	A* p = new A(2);	//()括号内为显示的给对象初始化的值
	return 0;
}

2、假如要销毁数组类的内容,最好使用[]来修饰一下,因为虽然对于内置类型不会报错,但是自定义类型会直接报错

operator new和operator delete函数

new和delete是用户进行动态内存申请和释放的操作符

operator new 和operator delete是系统提供的全局函数

new在底层调用operator new全局函数来申请空间

delete在底层通过operator delete全局函数来释放空间

最终还是通过malloc和free来进行动态内存分配,不过和c不同的是,c++空间申请失败,会出现抛异常的情况,而不是返回NULL

new和delete的原理内部实现

内置类型

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL

自定义类型

如果是自定义类型,就有很大区别了

new的原理

1、调用operator new申请空间,

2、调用构造自定义类型的构造函数进行初始化

delete的原理

1、调用operator delete释放空间

2、调用自定义类型的析构函数进行初始化

所以我们使用c++的时候最好使用new和delete进行动态内存开辟,因为这样可以更方便进动态内存管理,防止内存泄露

上一篇:C++实现简单学生管理系统

栏    目:C代码

下一篇:c++ qt自定义搜索编辑框的实现方法

本文标题:C++内存管理详解使用方式

本文地址:http://www.codeinn.net/misctech/227361.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有