1.类声明只是描述如何分配内存,因此静态类成员不能在其中初始化,况且静态类成员是单独存储的(例外情况是const整数类型或枚举型)。单独的初始化语句需指出类型和作用域运算符,但无需使用关键字static。
2.删除对象不能自动释放指针成员指向的动态内存,创建对象也不能为指针成员自动分派动态内存。
3.特殊成员函数有:默认构造函数、默认析构函数、复制构造函数、赋值运算符、地址运算符。
4.生成对象副本时使用复制构造函数,如函数的按值传递和返回、临时对象的生成。默认的复制构造函数逐个复制非静态成员的值,为浅复制。如果类中包含使用new初始化的指针成员,则必须创建指针指向的内存副本,进行深复制。
5.赋值运算符进行深复制的注意点:若给自身赋值,应当直接返回;目标对象可能引用了以前分配的数据,应当先进行空间释放;函数返回目标对象的引用。
6.空指针的表示:C++98使用0或(void*)0或NULL。C++11使用nullptr。delete和delete []都可用于空指针。
7.静态类成员函数不属于对象,且无法使用this指针,只能使用静态类数据成员。
8.get(char*, int)读取空行,早期的版本中读取的字符串首字符为‘\0‘,而现在的版本将返回false。
9.delete不能与定位new运算符配合使用,使用定位new运算符创建的对象应显式调用析构函数,应与创建对象的顺序相反,晚创建的对象可能依赖于早创建的对象。
10.栈是先进后出的,队列是先进先出的。
11.嵌套的结构、类和枚举的作用域为整个类,若在公有部分声明,将可在外部使用作用域解析符来使用,若是私有部分,只能在类中使用。
12.只有构造函数能够使用初始化列表语法。const类成员和引用型类成员都必须使用这种语法,它们都是在声明时需要马上初始化的类型。初始化器格式为 memberName(value),用逗号分隔,位于参数列表的右括号之后,函数体左括号之前,前面带冒号。数据成员初始化的顺序与它们出现在类声明中的顺序相同。C++11的类内初始化与初始化列表等价,但初始化列表的值会覆盖类内初始化的值。
13.提供复制构造函数和赋值运算符,并声明为私有,可防止默认方法定义的滥用。
C++ Primer Plus 第十二章总结——类和动态内存分配
原文:https://www.cnblogs.com/aPaulWong/p/14696175.html