5. 三大函数:拷贝构造 拷贝赋值 析构函数
- String 类
拷贝构造和拷贝赋值应该怎么写
只要类里面带指针,一定不要用编译器的默认拷贝构造函数,一定要自己写
- 三个特殊函数
String (const char\* cstr = 0); //构造传入一个指针,默认赋值为0
String (const String& str); //以自身类型作为参数,称为拷贝构造函数
String& operator = (const String& str); //赋值运算符重载,同事以自身作为参数,称为拷贝赋值
只要类带着指针,一定要写这个函数
~String(); //析构函数 当对象死亡(离开作用域)的时候 会调用
- 构造函数和析构函数
类中如果有指针,多半要做动态分配,既然做了动态分配,做了动态分配,则要在析构函数里将分配的内存还给系统
图中例子,离开右下角作用域的时候,要调用3次析构函数
- 含指针的类必须要有拷贝构造函数和拷贝赋值函数
如果不自己写拷贝构造函数和拷贝赋值函数,很容易造成浅拷贝
- 拷贝构造函数
拷贝构造函数中应该创造一个足够的空间存放蓝本
图中蓝色的两行意思完全相同,即以s1为蓝本,创建出一个s2
调用拷贝构造函数,创造空间,将蓝本的内容拷贝过去,叫做深拷贝
- 拷贝赋值函数
拷贝赋值操作是两个已有对象的操作
ran hous1赋值给s2,s2要先杀掉自己,然后分配一块跟s1一样大的存储空间,将s1拷贝进去,然后返回自身引用
if 语句是检测是不是自己赋值给自己,看二者的指针是不是指向同一块内存,如果不写的话,如果发生自我
赋值,则后面的语句结果会出错
还没有评论,来说两句吧...