c++学习笔记4:构造函数与析函数

构造函数和析构函数

5、构造函数和析构函数

这两个函数将会被编译器自动调用,完成对象的初始化和清理工作。

编译器提供的构造和析构函数是空实现(即函数内容为空)。

构造函数:对象创建时为对象的成员属性赋值,由编译器自动调用。

析构函数:对象销毁前系统自动调用,执行一些清理工作。

构造函数语法:类名(){}

没有返回值也不写void,函数名称与类名相同,可以有参数,可以发生重载,程序调用时会自动调用,无需手动,且只会调用一次。

析构函数语法:~类名(){}

没有返回值也不写void,函数名称与类名相同,不可以有参数,不可以发生重载,程序调用时会自动调用,无需手动,且只会调用一次。

6、构造函数的分类及调用

1)分类

按参数:有参构造、无参构造

按类型:普通构造、拷贝构造( 语法:Person(const Person &p){} )

2)三种调用方式:

括号法(调用有参构造 Person p(10);  )

显示法、

隐式转换法

Person p4=10;//相当于写了Person p4=Person(10); 有参构造

Person p5 = p4;//拷贝构造

注意事项:

1)在调用默认构造时,不要在后面加()。直接Person p1;

Person p1(); 编译器会认为这是一个函数声明,不会认为是在创建对象。

2)Person(10); 为匿名对象,特点:当前行执行结束后,编译器会对匿名对象进行马上回收。

注意不要利用拷贝构造函数来初始化一个匿名对象。编译器会认为Person(p3) = Person p3;

Person(p3);//错误

2月28日

1、拷贝构造函数的调用时机

1)使用一个已经创建完毕的对象来初始化另一个对象

2)值传递的方式给函数参数传值。

3)以值方式返回局部对象。

2、构造函数调用规则

1)若用户定义了有参构造函数,则c++不再提供默认构造,但会提供拷贝构造。

2)若用户定义了拷贝构造函数,则c++不再提供其他构造函数。

3、深拷贝与浅拷贝

深:在堆区重新申请空间,进行拷贝操作。

浅:简单的赋值拷贝操作。

如果利用编译器提供的拷贝构造函数,会做浅拷贝操作,浅拷贝带来的问题是会重复释放堆区的内存。浅拷贝带来的问题要用深拷贝解决。

解决方法:

做深拷贝

如果属性有在堆区重新开辟了内存,一定要做深拷贝构造函数,不然会造成内存重复释放。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值