int *p,*q;
p = new int; // 给一个整型变量分配所需的空间
q = new int[20]; // 给元素个数为20的整型数组分配空间
delete p; // 释放一个整型变量所占用的空间
delete [ ]q; // 释放元素个数为20的整型数组所占用的空间
1. 操作符new的作用是什么?如何申请单个空间?如何申请动态数组?用new创建类的对象时,会发生哪些操作?必要时,请用代码说明。
- 作用: 在堆中申请一段空间,动态分配内存
- 申请单个空间:
int *a=new int; - 申请动态数组:
int *b=new int[10]; - 操作: $new$创建类对象需要指针接收,一处初始化,多处使用,作用域是全局,且需要手动释放空间,在堆中动态分配内存,调用构造函数。
2. 操作符delete的作用是什么?如何删除单个用new申请的空间?如何删除申请的动态数组?用delete删除一个类的对象时,会发生哪些操作?必要时,请用代码说明。
- 作用: 释放所申请的空间
- 删除单个空间:
delete a; - 删除动态数组:
delete []b; - 操作: 释放在堆中分配的内存,调用析构函数
3. 什么是悬挂指针(又称为野指针,Dangling Pointers),其危害是什么?
- 定义: 指针指向非法的内存地址,那么这个指针就是悬挂指针,也叫野指针,意为无法正常使用的指针。
- 危害: 野指针造成的危害程度和危害时间未知,因为野指针指向的内存空间,有可能是某个重要的数据或其他程序,严重的情况下会造成程序崩溃。
4. 什么是切片(Slicing)?
派生类的存储结构与基类的存储结构存在着粘接(splice)关系:当子类对象拷贝到父类对象时,父类对象中只存在父类定义的成员,而不会出现任何子类中的成员。