5 c++默认编写了哪些函数

一、c++默认编写了哪些函数

copy构造函数、一个copy assignment操作符和一个析构函数、default构造函数。
当这些函数被需要时,它们才会被编译器创建出来。
注意:编译器产出的析构函数是个non-virtual,除非这个class的base class自身声明有virtual析构函数(这种情况下这个函数的虚属性virtualness主要来自base class.)。

二、这些函数做了哪些操作

  • copy构造函数和copy assignment操作符:将来源对象的每一个non-static成员变量拷贝到目标对象(浅拷贝)
  • default构造和析构函数:调用base classes和non-static成员变量的构造函数和析构函数。

三、编译器什么时候不会生成默认的构造和复制函数

  • 如果声明了构造,则编译器不会再生成默认构造,但会生成复制函数和析构函数(如果它们被调用)。
  • 当class内包含reference或const修饰的成员变量,则编译器不会生成copy assignment操作符。因为reference一经初始化便不可再修改,而const也不允许再修改。
  • base class中的copy assignment是private的,则编译器不会在生成copy assignment。因为derived classes中的copy assignment会调用base class中的copy assignment来赋值base class中的成分。但是base class 中的copy assinment是私有的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值