c++之构造与析构

c++编译器提供构造函数完成对象的初始化工作
与类名同名的成员函数是构造函数,可以有参数但没有返回类型声明
构造函数可以自动调用和手动调用
自动调用:一般情况下C++编译器会自动调用构造函数
手动调用:在一些情况下则需要手工调用构造函数
析构函数没有参数也没有任何返回类型的声明
析构函数在对象销毁时自动被调用

先构造的后析构,后构造的先析构
调用有参构造函数的三种方法
test t(1,2)
test t=(1,2) 逗号表达式相当于1个参数
直接调用构造函数或者说是手动的调用构造函数将产生一个匿名对象,匿名对象的去和留先抛砖。
对象的初始化 和 对象的赋值 是两个不同的概念
t2 = t1 //属于对象的赋值,对象的赋值不会调用构造函数
如果类没有构造函数和拷贝构造函数,则c++编译器会提供默认的构造函数和拷贝构造函数,但是默认的拷贝构造函数是浅拷贝。
拷贝构造函数的3种调用时机
1,用一个已初始化对象去初始化另一个未初始化对象test t2= t1 test t2(t1)
operator=() 赋值操作相当于操作符重载,是不会调用构造函数的
2,void f(Location p)
{
cout<<p.GetX()<<endl;
}
用一个已初始化对象去调用f
所以初始化p时会调用拷贝构造函数
3,Location g()
{
Location A(1, 2);
return A;
}
函数的返回值是一个元素 (复杂类型的), 返回的是一个新的匿名对象(所以会调用匿名对象类的copy构造函数)
结论2: 有关 匿名对象的去和留
//如果用匿名对象 初始化 另外一个同类型的对象, 匿名对象 转成有名对象
//如果用匿名对象 赋值给 另外一个同类型的对象, 匿名对象 被析构
4,拷贝构造函数的第四种调用方法
编译器与编译器的行为不一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值