当前位置:文档之家› C++第七章 动态内存分配习题解答

C++第七章 动态内存分配习题解答

第七章动态内存分配习题
一、基本概念与基础知识自测题
7.1 填空题
7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。

答案:(1)代码区,存放程序代码;
(2)全局变量与静态变量区,存放全局变量或对象(包括静态);
(3)局部变量区即栈(stack)区,存放局部变量;
(4)动态存储区,即堆(heap)区或自由存储区(free store)。

7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动
态建立对象的初始化是通过(3)来(4)。

答案:(1)命名对象
(2)无名对象
(3)初始化式(initializer)
(4)显式初始化
7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。

如果new返回的指针丢失,
则所分配的堆空间无法收回,称为(2)。

这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。

答案:(1)返回一个空指针(NULL)
(2)内存泄漏
(3)重新启动计算机后
(4)并不依赖于建立它的作用域
7.1.5 按语义的缺省的构造函数和拷贝构造赋值操作符实现的拷贝称(1),假设类对象
obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。

答案:(1)浅拷贝
(2)同一个堆对象
7.2简答题(以下习题题号可能和教材不一致!)
7.2.1用delete删除p所指向的无名对象时,p指针也同时被删除了,对不对?为什么?答:不对。

注意这时释放了p所指向的无名对象占用的内存空间,也就是撤销了该无名对象,称动态内存释放(dynamic memory deallocation),但指针p本身并没有撤销,它仍然存在,该指针所占内存空间并未释放。

7.2.2为什么动态建立类对象数组时,类的定义一定要有缺省的构造函数?
答:new后面类(class)类型也可以有参数。

这些参数即构造函数的参数。

但对创建数组,没有参数,只能调用缺省的构造函数。

7.2.3要实现深拷贝,自定义的拷贝构造函数应该怎样设计?
答:如果类中有一个数据成员为指针,该类的一个对象中的这个指针p,指向了动态分配的一个堆对象。

深拷贝时要给新建立的对象独立分配一个堆对象。

这时拷贝的构造函数应
该设计为:先拷贝对象主体,再为新建对象的指针分配一个堆对象,最后用原对象的堆对象拷贝新对象的堆对象。

即分三步完成。

相关主题