学习第48天

C++

1. const成员变量的初始化、
   	1. 在构造函数中必须给初值、
   	2. 不可以通过赋值来给初值、只能初始化列表 中给值、
2. 默认构造函数、
   	1. 即没有函数参数的函数、
   	2. 生成对象是肯定会调用构造函数、如果没有构造函数则会默认初始化、
   	3. 如果没有默认构造函数则编译器会隐式的自动定义一个默认构造函数、此构造函数没有任何参数、即称为合成的默认构造参数、
   	4. 只有在没有==构造函数的前提下系统才会创建合成的默认构造函数==、一旦在类中定义构造函数、无论构造函数内容及其是否带有参数、系统均不会在创建合成的默认构造函数、
3. =default; =delete;
   	1. a()=default;——编译器自动为带有default的函数==自动生成函数体==、相当于a() {}、只是系统替换了{}、
   	2. 带有参数的函数不可以使用、==只能用于默认构造函数==、
   	3. a()=delete;——显示的禁用函数、系统不会在生成默认构造函数、不会自动生成函数体、于default相反、
4. 拷贝构造函数、
   	1. 从一个函数中返回一个对象、
   	2. 默认情况下类对象的拷贝是每个成员变量逐个拷贝、
   	3. 函数默认参数必须放在函数声明中、除非这个函数没有函数声明、
   	4. 拷贝构造函数就是一个类的构造函数的第一个参数、是所属类的类型引用、且还有其它额外参数、这些额外的参数都有默认值、
   	5. 拷贝函数的主要作用、是在一定的时候被系统自动调用、
   	6. ==复制构造函数(拷贝构造函数)只能有一个==、
   	7. 建议拷贝函数的第一个参数带有const 不要声明explicit(禁止隐式类型转换)explicit建议使用在带一个形参的拷贝函数中、
   	8. 使用拷贝函数后、将丢失默认的类拷贝对象的、也就是说、不再是逐个成员变量的拷贝、
   	9. 没有给定义一个拷贝构造函数那么编译器将会为我们定义一个拷贝构造函数(合成拷贝函数)、
   	10. 一般合成拷贝函数拷贝是默认类中的成员逐个拷贝、
   	11. 每个成员变量类型决定如何拷贝、成员变量是整型的话就会直接将值拷贝过去、
   	12. 成员是类类型的话就会调用这个类的拷贝构造函数来进行函数拷贝、
   	13. 自己定义拷贝函数就会替代系统合成的拷贝函数、自己拷贝函数需要给类的成员赋值、否则将会出现函数成员没有值、
   5. 频繁的申请和回收内存会导致内存上产生大量的空洞、从而导致最终无法申请内存、因此DDK提供啦Lookaside结构来解决此问题、
   6. 可以将Lookaside对象看成一块内存容器、在初始化时、向windows申请一块较大的内存、以后需要申请内存时直接从Lookaside申请而非是windows申请、从而解决此问题、如果Lookasids对象内存不够时会向操作系统申请更多的内存、
原文地址:https://www.cnblogs.com/chengyaohui/p/13797279.html