C++11 类的新功能

新的默认成员函数

C++11在6个默认成员函数基础上又加了两个:移动构造函数移动赋值函数

针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下:

C++11 类的新功能_第1张图片

小结:

(1) 生成默认移动构造的条件比较严苛:必须是没有实现析构函数拷贝构造拷贝赋值重载中任意一个才会生成默认移动构造函数

(2)没有移动构造函数,编译器会自动调拷贝构造函数:

例如,有一个person类:C++11 类的新功能_第2张图片

不写拷贝构造编译器会自动生成拷贝构造,同样不写构造,拷贝构造,移动构造,编译器才会生成默认移动构造:

C++11 类的新功能_第3张图片

 假设我们把其他类里的移动构造函数屏蔽调,编译器就调不了,没有移动构造函数,编译器会自动调拷贝构造函数:

假设我们给person类加一个析构函数:我们发现,它就调不了默认移动构造了:

default

假设我们要释放一下内存,调了析构,那么编译器就不会再生成默认移动构造函数

我们可以利用default强制编译器生成默认移动构造函数
但是强制生成默认移动构造函数会导致编译器不再生成默认拷贝构造函数这个时候有两个选择:

1.手动写一个拷贝构造函数:C++11 类的新功能_第4张图片2.default强制编译器再生成一个默认拷贝构造函数:

C++11 类的新功能_第5张图片

delete

可以强制性禁止生成默认函数。

例如现在不让生成右值:

可变参数模板

我们之前知道可变参数函数printf:

 C++11把可变参数扩展到了模板。格式如下:

可变参数模板可以识别参数类型,个数: 

C++11 类的新功能_第6张图片

可以通过sizeof()计算参数包的个数:C++11 类的新功能_第7张图片

你可能感兴趣的:(c++,开发语言)