标签:malloc 对象 创建对象 new Circle delete 构造函数
动态创建对象
对于class类型,必须用new/delete来创建,销毁。
malloc/free是无法胜任的。
new:动态创建一个对象:
- 申请一块内存
- 内部调用了构造函数
delete:释放这个对象:
- 调用了析构函数
- 释放内存
//动态创建一个对象
Circle * c=new Circle();//默认构造函数
Circle * c=new Circle;//不加括号也可以
Circle * c=new Circle(1,1,4);//传构造参数
//释放对象
delete c;
注意:new的时候构造函数被调用,delete的时候析构函数被调用
动态创建多个对象
Circle *c=new Circle[4];
delete [] c;
注:含有“默认构造函数”的类,才可能使用new []一次性地创建多个对象。
new与malloc的最大区别
1. malloc返回的只是一片内存、不是对象(malloc不负责构造)
2. new返回的是一个可以正常工作的对象(因为它调用了构造函数)
所以new/delete绝不仅仅时申请内存这么简单,它是申请了内存,并且构造了对象。
总结:
1. new 得到的是一个对象,malloc得到的不是对象。因此C++的类必须使用new,不能用malloc
2. new一个对象的时候,可以传参,内部会调用构造函数
3. new多个对象(数组)的时候,不能传参函数,要求类必须有默认构造函数
标签:malloc,对象,创建对象,new,Circle,delete,构造函数 来源: https://blog.51cto.com/u_8697137/3044816
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。