作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!
文章目录
- 前言
- 一、C++内存管理方式
- 1.1 new/delete操作内置类型
- 总结
前言
今天再讲一个老朋友,但是这个老朋友变得比原来更加的优秀了,盖头换面了,还是同一个人,那接下来让我们来看看他的真面目。在C语言说的可以看这篇C语言的动态内存管理
一、C++内存管理方式
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因
此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。
1.1 new/delete操作内置类型
// 动态申请一个int类型的空间
int* ptr1 = new int;
int* ptr2 = new int[1];
// 动态申请一个int类型的空间并初始化为10
int* ptr3 = new int(10);//这种写法只限一个元素的初始化
int* ptr4 = new int[1]{ 10 };//这种初始化也行
// 动态申请n个int类型的空间
int* ptr5 = new int[3]{10,10,10};//动态申请3个int类型的空间并初始化为10
int* ptr6 = new int[6]{ 10,10,10 };//动态申请6个int类型的空间并初始化为
//前三个初始化为10,后三个默认为0
delete ptr1;
delete[] ptr2;
delete ptr3;
delete[] ptr4;
delete[] ptr5;
delete[] ptr6;
对于内置类型new和malloc没有什么区别,new可以进行初始化,而且使用起来也很方便,他不需要计算类型的大小,可以自动识别大小,对于内置类型的使用就这些,我们来看看自定义类型
class A
{
public:
A(int a = 0)
: _a(a)
{
cout << " A(int a = 0):" << this << endl;
}
~A()
{
cout << "~A():" << this << endl;
}
private:
int _a;
};
对于new和malloc会调用构造函数和析构函数,这和malloc和free最大的差别,所以初始化的方式和之前的差不多,注意一些细节就好了
交叉使用会出现什么情况
对于C语言malloc和free是一对,对于C++new和delete是一对,实现的目的都是一样的,一个是开空间,一个是释放空间,我们来看看交叉使用会出现什么情况
对于只开辟一个类型空间大小,不管内置类型和自定义类型都没有任何影响,但是开多个类型空间,就回报错,所以大家还是不要交叉使用了。