C++面向对象高级编程_第二周

String类的学习

带指针成员的类必须重写拷贝构造函数和拷贝赋值函数,这些函数的参数接受自己类的引用  有指针 构造时需要做动态内存分配,析构时要释放内存。

拷贝构造函数:如果没有重写的话,系统提供的拷贝构造函数,浅拷贝 只是指针的拷贝,两个指针指向内存中的同一块区域,指向相同的内容。拷贝构造函数,新申请一块内存,把指针指向这块内存,并把数据内容拷贝到这块内存中,对象的深拷贝,两个指针指向内存中不同的地址,但两个地址所存放的内容是相同的。

拷贝赋值函数:1.检测自我赋值。2.先delete原来的指针,3.申请新的内存,4.把要拷贝的内容,复制到新的内存空间。

析构函数 :对象死亡的时候调用,清理内存

操作符<< 和 >>的重载 不能写成成员函数,必须写为全局函数。

堆,栈与内存管理

Stack 存在于某作用域的一块内存空间(memory space) 。调用函数时,函数本身会形成一个Stack来存放接收的参数,传回地址,局部变量等。

示例:Complex c1(1,2)。Stack object 在作用于结束时,由系统自动清理。static Complex c2(2,3)。static object 在作用于结束之后仍然存在,直到整个程序结束。写在任何作用域之外的对象,为全局对象,global object 作用域为整个程序,可以视为一种static object。

Heap堆,system heap 由操作系统提供的一块global内存空间,程序可以动态分配(dynamic allocated)其中的若干区块(blocks)。使用 new操作符,并由delete释放回系统。

示例:Complex *p = new Complex(1,2)。生命在delete时结束。如果没有delet就会造成内存泄漏(memory leak)。作用域之外也就没有办法访问p指针。

new操作符的过程:先分配内存memory,p指向这块内存。再调用构造函数constructor,创造对象,放在这块内存中。 mollac

delete操作符的过程:先调用析构函数,在调用delete指针,释放内存。free

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容