/** C++11
*
- C++11新增了两个构造函数,分别是
- 1.移动构造
- 2.移动赋值
- 但他们自动生成的条件非常苛刻:
- -- 实现一个都不行? 对,只要实现到其中1个或以上都不会自动生成
- 原因:
-
如果我们重载了析构,拷贝,赋值,就说明这个类是需要深拷贝的,那这个类最好是由我来决定资源如何转移,而不是由编译器控制,以免出现意想不到的结果
-
对于自定义类型成员,如果该自定义类型内实现了移动构造,就调用他的移动构造,没有实现就调用他的拷贝构造。
-
--- 默认生成的移动构造,需要自定义类型实现了移动构造才能发生移动,其他都是值拷贝或深拷贝...
- 强制生成默认的移动构造
- A(A&& a) = default;
- A& operator=(A&& a) = default;
*/
//类成员变量初始化 -- 缺省值
/**
//关键字default -- 强制生成默认的构造函数
/**
*
- C++11可以让你更好的控制要使用的默认函数。假设你要使用某个默认的函数,但是因为一些原因这个函数没有默认生成。
- 比如:我们提供了拷贝构造,就不会生成移动构造了,那么我们可以使用default关键字显示指定移动构造生成。
- 强制生成默认的移动构造
- A(A&& a) = default;
- A& operator=(A&& a) = default;
*/
- 1.如果能想要限制某些默认函数的生成,在C++98中,使该函数设置成private,并且只声明 ,这样只要其他人想要调用就会报错。 --- 不够明确/清晰
- 2.在C++11中更简单,只需在该函数声明加上 = delete即可,该语法指示编译器不生成对应函数的默认版本,
- 称 = delete修饰的函数为删除函数。 -- 更清晰明确
- 哪些对象不希望被拷贝,被移动? -- 1.I/O流 2.单例模式...
*/
//继承和多态中的final与override关键字
/**
- final: -- 修饰基类,父类
- 1.final可以修饰一个类,使其不能被继承.
- 2.final还可以修饰成员函数,使其不能被重写.
- override: --- 修饰派生类
- 1.override用于修饰派生类的虚函数.检查是否完成重写.
- 什么情况下子类必须重写虚函数 --- 规定:纯虚函数的子孙类必须至少有一个重写纯虚函数.
*/
//委托构造 -- 可读性差点,意义不大,只提高了复用性.但可以不使用,可有可无
/**
- 委托构造函数也是一种构造函数,这种构造函数可以委托其他构造函数来帮它完成一些对象成员的初始化操作。
- 一个构造函数可以调用其他构造函数
/
/class Person
{
public:
Person(const char* name,int age)
:_name(name)
,_age(age)
{}
Person(const char* name) //委托构造
:Person(name,18) // ---- 借用已有的构造函数来帮助构造,初始化
{}
private:
string _name;
int _age;
};*/
//C++ 11是如何封装Thread库的? - 知乎
//https