2021-03-07 分类: 网站建设
(1).通过operator new申请内存;
(2).使用placement new调用构造函数(简单类型忽略此步);
(3).返回内存指针。
new和malloc的比较:
(1).new失败时会调用new_handler处理函数,malloc不会,失败时返回NULL;
(2).new能通过placement new自动调用对象的构造函数,malloc不会;
(3).new出来的东西是带类型的,malloc是void*,需要强制转换;
(4).new是C++运算符,malloc是C标准库函数。
new的三种形态:new operator,operator new,placement new
(1).new operator:上面所说的new就是new operator,共有三个步骤组成(申请内存,调用构造函数,返回内存指针),对于申请内存步骤是通过运算符new(operator new)完成的,对于调用什么构造函数,可以由placement new决定;
(2).operator new:像普通运算符一样可以被重载,operator new会去申请内存,申请失败的时候会调用new_handler处理,这是一个循环的过程,如果new_handler不抛出异常,会一直循环申请内存,直到成功;
(3).placement new:用于定位构造函数,在指定的内存地址上用指定类型的构造函数构造对象。
对象销毁(delete)过程:
(1).调用析构函数(简单类型忽略此步);
(2).释放内存。
delete和free比较
(1).delete能自动调用对象的析构函数,free不会;
(2).delete是C++运算符,free是C标准库函数。
3、拷贝构造函数参数为什么必须使用类类型对象引用传递?
传参的位置如果一直调用拷贝构造函数,也就是会递归引用,导致栈溢出。
4、赋值运算符重载函数为什么要避免自赋值?
(1).提高效率。自赋值无意义,如果自赋值,可以立即return *this;
(2).如果不避免,当类的数据成员中如果含有指针,自赋值时会造成内存泄漏。
本文标题:C++ 类的默认函数
分享路径:/news0/104650.html
成都网站建设公司_创新互联,为您提供微信小程序、网站制作、网站改版、外贸建站、域名注册、ChatGPT
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容