c++动态内存管理/模板

一,动态内存管理

(1)C语言和c++区别

在C语言中,我们常用malloc和calloc申请空间,用free来释放空间,而现在我们更多的情况下用new来申请空间,用delete来释放空间。

申请一个空间:

int* p2 = (int*)malloc(sizeof(int));//空间值为随机值
int* p3 = new int;//空间值为随机值

申请多个空间:

int* p4 = (int*)malloc(sizeof(int) * 10);
int* p5 = new int[10];

释放一个空间:

free(p2);

delete p3;

释放多个空间:

free(p4);

delete[ ] p5;

(2)申请空间的同时进行初始化:

int* p6 = new int(10);申请4个字节,一个空间,用()进行初始化
int* p7 = new int[10] {1, 2};申请多个空间,[ ]里面写申请空间的个数,{ }中,写初始化的值
int* p8 = new int[10] {};//默认为0,当写成这个样子的时候,默认是初始化为零,如果没有写{}则初始化为随机值(不同的编译器也有可能不同)

为什么出++中改用new来申请空间,而不用malloc?

答:因为malloc没有办法很好的支持动态申请的自定义对象初始化。

例如,用new来开辟自定义类型的空间并初始化

class A {
private:  int _a;
public:
    A(int a = 0)
        :_a(a)
    {}
}

A* P2 = new A;
A* P3 = new A(3);

delete P2;
delete P3;

A* P4 = new A[10];
delete[ ] P4;

将A类实例化为aa1,aa2,并开辟一块空间,将这两个对象放到里面:

A aa1(1);
A aa2(4);
A* P5 = new A[10]{ aa1,aa2 };
delete[] P5;

以上式子可以简写为以下代码:

A* P6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值