一.匿名对象
1.定义:
没有名称的临时创建的对象,通常用于临时操作或作为函数的实参或返回值。
2.声明周期与作用域:
仅仅在定义所在代码行中,执行完就销毁。
3.使用格式
类名(构造参数)
4.使用场景
临时调用成员函数
mid:C++内存管理
二.new与delete
1.new与delet作用:
new动态开辟空间,如果是自定义类型会调用对象的构造函数,delete释放动态空间并调用对象的析构函数
2.本质
(1).new的操作是operator new函数与对象构造函数构成的
operator new 可以理解是malloc加上失败抛异常
(2).析构函数操作是析构函数和operator delete完成的operator delete又可以理解为free加上抛异常(其实不是free,是另外一个_free函数,free是它的包装)
3.问题
(1)new与构造,delete与析构不会对同一块空间操作吗
不会,new只会为原来在栈上开辟空间的成员变量在堆上开空间,构造会在堆上/别处开辟资源(动态开辟数组/流/别的)
delete只会销毁非资源的,如new开辟的,析构会销毁开辟的资源(原来在堆上动态开辟的)
4.语法
1.new开单空间
类型指针=new 类型(初始化值);//自定义类型会让初始化值隐式类型转化再拷贝构造
2.new开多空间
类型指针=new 类型[n个]{初始化值};
1.delete释放单空间
delete 指针;
2.delete释放多空间
delete []指针;
(对于内置类型,delete就相当于free,所以delete p,也没问题,因为自定义类型要析构释放资源,不delete[] p使仅能调第一个对象的析构,其他仅能free,不能调用析构,资源泄漏。
注意:如果传参的个数少于开辟的类型个数,对内置类型,其他变量赋值0,自定义类型调用它的默认构造。
5.初始化参数与某成员构造参数个数相同情况
要调用多参构造,要在花括号内部加{参数},外部花括号是指多个对象初始化表,内部花括号指单个对象多参数表。