C++ 类的默认函数

发布时间:2025-04-09 点击:10
对象创建(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).如果不避免,当类的数据成员中如果含有指针,自赋值时会造成内存泄漏。


轻松做好网站内容建设
网站营销外包的好处都有哪些?
网站建设中经常让人忽视的UI设计分析
网站维护哪家好?
企业网站改版?您需要了解哪些细节呢?
如何给网站做高质量的外链
移动网站建设中的设计重点是什么?
网站设计要考虑三个因素!