【GeekBand】class with pointer member(s) String类

1.拷贝构造函数

    如果没有自定义拷贝构造函数,则编译器默认构造一个,直接按位拷贝。

    类中如果带指针则一定要自己写拷贝构造函数和拷贝赋值(重载操作符=),否则只是复制指针(bitwise copy/浅拷贝),既将两个指针指向同一块内存。

    拷贝构造函数采用深拷贝,首先要分配足够的内存,再将目标内容复制进开辟的内存空间中。

2.拷贝赋值(重载操作符=)

    步骤:检测自我赋值 若不是则 a.清理自身 b.分配足够大空间 c.拷贝进去,若是自我赋值则直接返回自身

    若没写自我赋值检测,则会造成错误,第一步a.清理自身时就把唯一的指针删掉,步骤b无法获得字符串长度,也就无法分配内存。

3.析构函数

    对应构造函数,构造函数中分配了内存则析构函数中需要释放,否则会造成内存泄漏。

    若使用new来生成对象,则需要手动delete掉

4.堆和栈,内存管理

    栈:局部对象存在栈中,称为stack object 或 auto object,生存期只在作用域中,离开作用域既消亡,会自动析构,无需手动清理。

    堆:自己new出来的对象存在堆中,在自己delete掉后生命结束。

    全局空间:包括static 对象和全局对象,程序结束后才会消亡。

    new的步骤:a.分配内存空间(operator new内部调用malloc(n));b.将void*指针转型为对象类型指针;c.调用构造函数

    delete的步骤:a.调用析构函数;b.释放内存(operator delete)

    array new 一定要搭配array delete(delete[]),若不加[],则只会调用1次析构函数,泄漏的内存为指针所指向的内存地址。

5.关于static

    non-static member function可通过this指针调用non-static members

    static data members 只有一份在全局空间,需要在类外部进行定义

    static member functions 与non-static member functions 区别在于没有this指针,只能处理static data members

推荐阅读更多精彩内容

  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 1,594评论 0 3
  • 1. 让自己习惯C++ 条款01:视C++为一个语言联邦 为了更好的理解C++,我们将C++分解为四个主要次语言:...
    Mr希灵阅读 1,789评论 0 13
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 7,693评论 1 51
  • 1 文件结构 每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件...
    Mr希灵阅读 2,259评论 0 14
  • 亲爱的贝贝,当你才14个多月时,妈妈就常常琢磨着——怎么这么小的娃娃,就会什么都知道了呢?妈妈说的话,都听的懂;妈...
    清怡荷上阅读 150评论 1 0