1 拷贝构造函数 拷贝赋值函数 析构函数
构造函数,拷贝函数,析构函数是三种特殊的函数。
之前讲的类着重于类中没有带指针的情况,现在着重
类中有指针的情况。
类中有指针就会导致浅拷贝,所以要考虑重新定义拷贝构造函数。
拷贝构造函数:函数名与类名相同,传入参数为自己类的object。
拷贝赋值函数和拷贝构造函数的区别:拷贝赋值函数是清空原有空间,创建新空间,将新的信息放入新的空间里;拷贝构造函数只需要创建新空间将新信息放入新空间。
拷贝赋值函数:自我检测非常重要。
2 堆、栈和内存管理
栈是存在于某个作用域的,堆是由操作系统提供的global内存空间;
栈的生命周期存在作用域结束时就结束了,是自动结束的。
静态对象的生命周期是在作用域结束之后仍然存在。
全局对象的生命周期在整个程序结束时结束,可以视为一种静态对象。
堆对象的使用要注意
内存泄漏。是否后续使用delete
在类里面使用堆对象:new 是分配一部分空间,然后调用delete。
new的操作流程是先分配一个空间,然后调用构造函数。
delete是先调用析构函数,然后再释放空间。
数组的new 一定要搭配数组的delete。
3 扩展补充
类中的静态数据或者静态函数:
将构造函数放在private区域的情况:
也就是单例,在之前有讲到过单例的情况,但没有展开介绍,
利用函数返回静态数据,以此创建和调用private里面的数据。并且构造函数不能被其它对象调用。
模版的补充:
编译器会对template进行引数推导,这一点非常方便,不需要人为设定。