老规矩:记录细节,等待空余,再进行整理。
1:const,static,const static成员初始化。
1、const成员:只能在构造函数后的初始化列表中初始化
2、static成员:初始化在类外,且不加static修饰。
3、const static成员:类只有唯一一份拷贝,且数值不能改变。因此,可以在类中声明处初始化,也可以像static在类外初始化。
2:拷贝赋值函数 和 拷贝构造函数。
1,拷贝赋值函数.
1)返回值是 左侧类型的引用。
2,拷贝构造函数。
1,通常的主体功能应该为:复制所有非static的类成员。
2,系统会默认构造。但尽量自行完成(除非类复制很简单)。
3,参数必须为引用。否则会导致递归调用,最终崩溃。
3,拷贝赋值函数 和 拷贝构造函数 是相互需要的。即:如果需要定义拷贝赋值函数就必须定义拷贝构造函数。反之亦然。
3:explicit关键字。
1,标识此关键字的构造函数,必须显示使用。无法隐式调用。
4:析构函数。
1,析构函数函数体内并不进行类成员的销毁。而是当析构函数体完成后,再销毁成员。
2,对于指针,销毁功能仅销毁指针本身,并不销毁指针指向的对象。所以,需要在析构函数中对指针进行delete/free
3,在原则上,一个类拥有析构函数,那就应该也拥有自己的拷贝构造函数和拷贝赋值函数。
5:移动函数。
1,分为移动函数 和 移动赋值函数。
2,移动函数(包括赋值)特点:“偷窃”源对象的数据。会导致源对象进入一种不可预测的情况。
3,移动函数的使用会提升运行效率。但需要注意,如果“偷窃”数据后的对象,依然会被其他线程和函数引用,会导致不可预测的错误。