匿名对象 与 new delet初识

一.匿名对象

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.初始化参数与某成员构造参数个数相同情况

要调用多参构造,要在花括号内部加{参数},外部花括号是指多个对象初始化表,内部花括号指单个对象多参数表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值