C++细节系列(零):零散记录
2015-04-15 19:20
169 查看
老规矩:记录细节,等待空余,再进行整理。
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,移动函数的使用会提升运行效率。但需要注意,如果“偷窃”数据后的对象,依然会被其他线程和函数引用,会导致不可预测的错误。
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,移动函数的使用会提升运行效率。但需要注意,如果“偷窃”数据后的对象,依然会被其他线程和函数引用,会导致不可预测的错误。
相关文章推荐
- C++细节点记录
- 讨论记录之C++细节
- 讨论记录之C++细节
- 系列1:C++语言细节
- 《一起学》系列1:C++语言细节
- 【C++杂谈0】记录一些我容易犯错的C++细节
- c/c++ 细节点记录
- 玩转Google开源C++单元测试框架Google Test系列(gtest)
- matlab2c使用c++实现matlab函数系列教程-normpdf函数
- Pentaho Kettle ETL整理及ETC技术细节系列
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
- 为什么C++(中文版——感谢waterwalk翻译) -刘未鹏程序语言系列
- 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good
- 关注C++细节——浅谈指针使用中注意…
- C++中static和extern的微妙细节
- 【c++系列】iostream iterators
- [C++再学习系列] 类常量
- 一些零散的C++语法思考
- C/C++知识细节整理
- 笨鸟先飞学编程系列之九-C++的模板编程