面向对象程序设计问答题OOP9指针


    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)关系:当子类对象拷贝到父类对象时,父类对象中只存在父类定义的成员,而不会出现任何子类中的成员。


文章作者: 保底不歪抽早柚
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 保底不歪抽早柚 !
评论
  目录