【C++】C++中的动态内存开辟

C语言动态内存

在C语言中动态申请内存依赖于三个函数:

  • malloc,开辟以字节为单位的指定空间
  • calloc,开辟以字节为单位的指定空间,并将其初始化为0
  • realloc,用于将动态开辟的内存进行扩容,根据情况进行原地或者异地扩容

而用于释放动态申请的空间则用free,一般来说再将指向该空间的指针置为NULL最好。

C++动态内存

因为C++是兼容C语言的,所以以上动态申请空间的方法于C++也是适用的,但是C++新增了两个更好用的关键字new和delete。

区别:

  • new、delete是关键字,而malloc、calloc、realloc是函数
  • 对于内置类型两者间没有区别,对于自定义类型,malloc、calloc只会开辟空间,而new会开辟空间,然后调用自定义类型的构造函数
  • 对于内置类型free和delete也没有区别,但是对于自定义类型,delete会先调用其析构函数,在释放空间

使用语法:

new:

int main()
{
    //申请一个空间
    int* a = new int;
    //申请一片连续的空间
    int* b = new int[10];
    return 0;
}

另外new也是支持申请空间后初始化的,如下:

int main()
{
	//初始化
	int* a = new int(10);
	//不连续初始化,后面默认为0
	int* b = new int[10]{ 1,2,3,4,5 };
	//完全初始化
	int* c = new int[10]{ 1,2,3,4,5,6,7,8,9,10 };
	return 0;
}
    

delete:

int main()
{
    //申请一个空间
    int* a = new int;
    //申请一片连续的空间
    int* b = new int[10];

    //释放申请的一个空间
    delete a;
    //释放申请的一片连续的空间
    delete[] b;
    return 0;
}

注意:new与delete要配套使用,何为配套使用?只new一个空间,那么释放就是delete;new了一片连续的空间,释放就要delete[ ],即:

  • new —— delete
  • new type[ ] —— delete[ ]

new type[ ]如果开辟的类型是自定义类型的话,开辟多少个自定义类型,就会调用多少次构造函数,delete[ ]也是如此,开辟多少个自定义类型,就会调用多少次析构函数,平且是先析构在释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值