内存管理(cpp)

博客IDLanFuRen
C系列专栏C语言重点部分  C语言注意点  C++基础  Linux  数据结构  C++注意点
声明等级:黑色->蓝色->红色

欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦

目录

1)C++中新的内存管理方法

1.new的用法

 2.delete的用法

2)为何不用C语言中的动态内存管理的函数


1)C++中新的内存管理方法

如何使用new 与delete

代码:

#include<iostream>
using namespace std;
class A
{
public:
	A(int a=0)//给缺省值
		:_a(a)
	{
		cout << "A()"<<endl;
	}

	~A()
	{
		cout << "~A()"<<endl;
	}

	void Print()
	{
		cout << _a <<endl;
	}
private:
	int _a;
};

int main()
{
	A aa(1);
	aa.Print();
	A* p2 = new A;
	A* p1 = new A[10];
	delete p2;
	delete[] p1;
	return 0;
}

 从以上代码不难看出new和delete的用法,那我就简单的解释一下两者的用法:

1.new的用法

new可以动态申请一个内置(或自定义)类型的空间

int*cptr1=new int;

A*cpptr1=new A;

 new还可以动态申请一个内置(或自定义)类型的空间

int*cptr2=new int(10);

A*cpptr2=new A(1);//这里存在隐式类型转换

 new还可以动态申请n个内置类型的空间(n是整数)

int*cptr3=new int[10];

A*cpptr3=new A[10];//开辟10个A类对象 

 2.delete的用法

delete会释放空间里的内存(值),然后调用析构函数(使指针迁移——ptr=nullptr)。

而且我们在使用delete的时候,要注意跟new进行匹配。

delete cpptr1;

delete cpptr2;

delete [] cpptr3;

2)为何不用C语言中的动态内存管理的函数

根据1)的分析,我们可以直观的感受到cpp新的内存管理方法更简便,所以不再去使用c语言的内存管理函数。

简便在于:cpp的吗内存函数会自动调用构造函数和析构函数,但是c语言函数调用不了,如果是内置类型的内存开辟,两者没有啥区别;但是自定义类型的内存开辟就得需要调用构造和析构了,但是cpp中是无法显示调用构造函数,所以这里用c的malloc等函数就失败了,但是可以调用析构函数,但是只能调用析构函数,构造函数的无法调用导致c的内存开辟是无法很好地使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值