👑个人主页:啊Q闻
🎇收录专栏:《C++》
🎉我自会去见我的山
💡感谢阅读,欢迎关注,点赞,收藏,评论💡
前言
C语言的内存管理在C++中可以继续用,但是对于C++而言,又不够用,所以C++提供了新的内存管理方式,提供new和delete操作符进行动态内存管理。
操作符new和delete
1.初始new和delete
通常使用new和delete来申请和释放单个元素的空间,使用new[ ]和delete[ ]来申请和释放连续的空间,要注意的是:二者的匹配使用。
使用如图:
初始化:
那new和delete不同于malloc和free的是哪些功能呢?
对于内置类型而言,二者在功能上没有什么区别,但是对于自定义类型成员而言,就只能用new和delete。因为使用malloc开辟空间时不会初始化,就导致后续无法对类中私有成员初始化。
对于自定义类型:
1.单个元素
2.多个元素
3.多个参数
2.探究new和delete的底层
new和delete是用户进行动态申请和释放的,,operator new 和 operator delete是系统提供的全局函数,new的底层是operator new+构造函数,delete的底层是operator delete+析构函数。
具体是这样的:
malloc/free和new/delete的区别总结:
1.malloc和free是函数,new和delete是操作符
2.malloc申请的空间不会初始化,new可以初始化。
3.malloc申请空间时,需要手动计算空间大小,new不需要,new只需要给出类型即可,如果是多个对象,在[ ]中指定对象即可。
4.malloc的会返回对象类型是void*,使用时要进行强转,new不需要。
5.malloc申请空间失败,会返回NULL所以malloc使用时,要判空。new不需要,new需要捕获异常。