C++ 类的默认函数

2021-03-07    分类: 网站建设

对象创建(new)过程:

(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++ 类的默认函数
分享路径:https://www.cdcxhl.com/news0/104650.html

成都网站建设公司_创新互联,为您提供微信小程序网站制作网站改版外贸建站域名注册ChatGPT

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设