(新特性)9

P9:

=default              =delete

构造函数、拷贝构造、拷贝赋值、以及新的搬移构造、新的搬移赋值

=default表示要编译器给我们的那一个,即使我们已经定义了,也要编译器给我们的那一个

=delete表示我们不要它

对于编译器提供的默认构造函数default ctor,实际上就是一个空的函数,什么也没做

对于继承,编译器会调用父类的默认构造函数

但是如果你写了构造函数,并且你还想要编译器给你一个空的构造函数,就用=default

我们写了构造函数-------->Zoo(int i1,int i2) : d1(i1), d2(i2) {     }

拷贝构造函数Zoo(const Zoo&)

右值引用Zoo(Zoo&&)

拷贝赋值

搬移赋值

析构函数

对于这个块引用中提到的函数,如果我们没有定义它们,那么编译器会为我们提供默认的版本

 

 

 

好奇标准库有没有用到这个语法

 

析构函数---------->~duration = default

如果析构函数写成 =delete,那么麻烦就大了

什么情况可以加=default,什么情况可以加=delete,并且加了不加编译过不过

构造函数本来就可以有很多,所有第一个、第二个可以并存

拷贝构造函数只能有一份,如果我们写了拷贝构造函数,那么 =default和=delete都会报错

拷贝赋值函数只能有一份,如果我们写了拷贝赋值函数,那么 =default和=delete都会报错

 

析构函数,可以=default

 

 

一般的成员函数不可以 =default

一般的成员函数可以 =delete,但是如果不想要这个成员函数,可以不写

 

写一个空的class Empty{   }

但是对于左面的程序(构造函数、拷贝构造、拷贝赋值、析构函数),编译器为我们提供了默认的程序(编译器为我们提供的默认的构造函数、默认的拷贝构造、默认的拷贝赋值、默认的析构函数都是public且inline)

这些函式做了什么呢?default ctor和dtor主要是给编译器一个地方用来放置藏身幕后(子类的构造函数调用父类的构造函数,这个调用父类构造函数的动作就要写在幕后的code中,)的code,像是唤起base classes以及non-static members的ctor和dtors。

 

到底什么class需要定义big three?什么class需要默认的版本就够了?

一个类里面只要带有pointer指针成员,就需要在class里面定义big three

一个类里面没有带有pointer指针成员,不需要在class里面定义big three,使用默认的就足够了

复数里面只有实部、虚部,没有指针

类模板中定义了构造函数,没有默认的构造函数,并且构造函数里面有初值----------->_Tp()有默认值,这个默认值取决于传入的参数类型,例如传入的类型式int,那么_Tp()默认值是0

 

字符串string里面有指针

 

指针的浅拷贝------>指针占4个字节,只是将这4个字节拷贝过去

 

指针的深拷贝------>指针占4个字节,不仅将这4个字节拷贝过去,还要将指针所指的内容也拷贝过去

因为字符串string 的代码比较复杂,侯捷老师没有展示

 

No-copy---------------->与拷贝有关的(拷贝构造,拷贝赋值)delete,通通不准外界调用

NoCopy(const NoCopy&) = delete                   //不允许拷贝构造

NoCopy &operator =(const NoCopy&) = delete       //不允许拷贝赋值

 

NoDtor-------------->将析构函数都delete掉

~NoDtor() = ddelete            //不允许析构,但是这种情况后果自负

 

PrivateCopy------------>将拷贝有关的(拷贝构造、拷贝赋值)private,

谁可以访问一个class的私有部分呢?-------------->(友元和class里面的members)friends和members 

                                   

boost是C++里面的一个社群,研究比较前沿的东西,完成后会放在C++的标准库里面

Foo继承noncopyable,那么Foo就拥有noncopyable的性质

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值