c++中内存管理的方式
在c语言中,我们拥有malloc和free等函数可以对内存进行动态管理
但是总体来说不是很方便,所以c++拥有了一种新的方式来对内存进行管理:通过new和delete操作符来对内存进行动态分配
new和delete操作符的使用方式
new操作符的使用方式:
#include<iostream> using namespace std; class a {}; int main() { int* p = new int(2); //动态分配一个int类型的空间,还可以将它初始化 int* p1 = new int[10]; //动态分配一个数组 a* p2 = new a; //动态分配一个类 return 0; }
delete操作符的使用方式:
#include<iostream> using namespace std; class a {}; int main() { int* p = new int(2); int* p1 = new int[10]; a* p2 = new a; delete p; //销毁p delete[] p1; //销毁p1 delete p2; //销毁p2 return 0; }
注意:
1、对于自定义类型,new和delete会自动调用构造函数和析构函数对创建出的对象进行初始化,也可以显示的写出想要被初始化的值,而malloc和free不会
#include<iostream> using namespace std; class a { public: a(int x = 1) :_x(x) {} private: int _x; }; int main() { a* p = new a(2); //()括号内为显示的给对象初始化的值 return 0; }
2、假如要销毁数组类的内容,最好使用[]来修饰一下,因为虽然对于内置类型不会报错,但是自定义类型会直接报错
operator new和operator delete函数
new和delete是用户进行动态内存申请和释放的操作符
operator new 和operator delete是系统提供的全局函数
new在底层调用operator new全局函数来申请空间
delete在底层通过operator delete全局函数来释放空间
最终还是通过malloc和free来进行动态内存分配,不过和c不同的是,c++空间申请失败,会出现抛异常的情况,而不是返回null
new和delete的原理内部实现
内置类型
如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回null
自定义类型
如果是自定义类型,就有很大区别了
new的原理
1、调用operator new申请空间,
2、调用构造自定义类型的构造函数进行初始化
delete的原理
1、调用operator delete释放空间
2、调用自定义类型的析构函数进行初始化
所以我们使用c++的时候最好使用new和delete进行动态内存开辟,因为这样可以更方便进动态内存管理,防止内存泄露
到此这篇关于c++内存管理详解使用方式的文章就介绍到这了,更多相关c++内存管理内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!
需要了解更多c/c++开发分享C++内存管理详解使用方式,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/1082013.html