美文网首页
C++ 从入门到放弃 (Day-05)

C++ 从入门到放弃 (Day-05)

作者: 麦兜兜买兜兜 | 来源:发表于2018-10-29 10:37 被阅读16次

    堆空间

    ◼ 在程序运行过程,为了能够自由控制内存的生命周期、大小,会经常使用堆空间的内存
    ◼ 堆空间的申请\释放
    malloc \ free
    new \ delete
    new [] \ delete []
    ◼注意
    申请堆空间成功后,会返回那一段内存空间的地址
    申请和释放必须是1对1的关系,不然可能会存在内存泄露
    ◼ 现在的很多高级编程语言不需要开发人员去管理内存(比如Java),屏蔽了很多内存细节,利弊同时存在
    利:提高开发效率,避免内存使用不当或泄露
    弊:不利于开发人员了解本质,永远停留在API调用和表层语法糖,对性能优化无从下手

    堆空间的初始化

    image.png

    memset

    ◼ memset函数是将较大的数据结构(比如对象、数组等)内存清零的比较快的方法


    image.png

    对象的内存

    ◼ 对象的内存可以存在于3种地方
    全局区(数据段):全局变量
    栈空间:函数里面的局部变量
    堆空间:动态申请内存(malloc、new等)


    image.png

    构造函数(Constructor)

    ◼ 构造函数(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作
    ◼特点
    函数名与类同名,无返回值(void都不能写),可以有参数,可以重载,可以有多个构造函数
    一旦自定义了构造函数,必须用其中一个自定义的构造函数来初始化对象
    ◼注意
    通过malloc分配的对象不会调用构造函数
    ◼ 一个广为流传的、很多教程\书籍都推崇的错误结论:
    默认情况下,编译器会为每一个类生成空的无参的构造函数
    正确理解:在某些特定的情况下,编译器才会为类生成空的无参的构造函数 ✓ (哪些特定的情况?以后再提)

    构造函数的调用

    image.png

    默认情况下,成员变量的初始化

    image.png

    ◼ 如果自定义了构造函数,除了全局区,其他内存空间的成员变量默认都不会被初始化,需要开发人员手动初始化

    成员变量的初始化

    ◼ 对象初始化


    image.png

    相关文章

      网友评论

          本文标题:C++ 从入门到放弃 (Day-05)

          本文链接:https://www.haomeiwen.com/subject/mcavtqtx.html