一、类可以分为带指针的与不带指针的两种形式,上周已经回顾不带指针的类的写法。
对于带指针的类,除了考虑其一般的构造函数的写法,还要考虑三个主要问题,即通常所说的Big Three:
1.拷贝构造函数
这种构造函数属于深拷贝,需要开辟空间存拷贝过来的数据。
2.拷贝赋值(即赋值操作符)
在拷贝赋值中,除了要开辟空间存储数据之外,首先要检查是否为自我赋值。
如果是自我赋值,则直接返回;如果不是自我赋值,则进行拷贝操作。
3.析构函数
析构函数中要把申请的资源(指针等)清理干净。
二、stack(栈) 与 heap(堆) 的区别
stack归作用域所有
stack object/ auto object 离开作用域则生命结束
heap归全局所有
static local object, global object 在作用域结束后仍存在,其生命直到整个程序结束时才结束。
三、new 与 delete
new:先分配memory,再调用ctor;
delete:先调用dtor,在释放memory。
array new 要搭配 array delete使用。
四、static
static data 在内存中有专门区域存放,在类之外必须要有定义。
static function 没有this指针,只能用于处理static data。
五、template
class template 使得class在设计时数据类型不被写死,在使用时根据具体情况确定数据类型;
function template 作用类似,编译器在编译时可以自动判断函数参数类型。
六、namespace
namespace相当于对名称进行了一个包装,防止名称有所冲突。
在一个namespace中声明的名称在使用时必须打开该“包装”。
网友评论