C++笔记

作者: 吃掉夏天的怪物 | 来源:发表于2021-04-26 20:56 被阅读0次
    1.png

    C
    在《C和指针》这本书里有介绍,int *p1=new int[10];该语句给指针p1分配内存,没有对指针初始化, int *p2=new int10;该语句给指针p2分配内存,并初始化指针

    在C++primer(第5版)中关于new的讨论有:
    1、new当个对象
    new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。
    int *pi = ``new int``; ``// pi指向一个动态分配的,未初始化的无名对象
    此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。
    默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化
    2、new(多个对象)数组
    new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。
    int *pia = ``new int``[``10``]; ``// 10个未初始化int
    int *pia2 = ``new int``[``10``](); ``// 10个值初始化为0的int

    2.png image.png
    image.png

    ❗ 重写与重载

    本题考查知识点:父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,会调用子类中的方法。
    再次说明了,子类中被重写的虚函数的运行方式是动态绑定的,与当前指向类实例的父类指针类型无关,仅和类实例对象本身有关。

    3.png

    函数char *myString()中没有使用new或者malloc分配内存,所有buffer数组的内存区域在栈区
    随着char *myString()的结束,栈区内存释放,字符数组也就不存在了,所以会产生野指针,输出结果未知

    image.png image.png

    相关文章

      网友评论

          本文标题:C++笔记

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