C++笔记
C
在《C和指针》这本书里有介绍,int *p1=new int[10];该语句给指针p1分配内存,没有对指针初始化, int *p2=new int10;该语句给指针p2分配内存,并初始化指针
2.png image.png在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
image.png
❗ 重写与重载
本题考查知识点:父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,会调用子类中的方法。
再次说明了,子类中被重写的虚函数的运行方式是动态绑定的,与当前指向类实例的父类指针类型无关,仅和类实例对象本身有关。
image.png image.png函数char *myString()中没有使用new或者malloc分配内存,所有buffer数组的内存区域在栈区
随着char *myString()的结束,栈区内存释放,字符数组也就不存在了,所以会产生野指针,输出结果未知