首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
有如下程序段: #include<iostream> using namespace std; class base { public: base(int cnt) { resource=new int[ent]; } ~base() { delete[]
有如下程序段: #include<iostream> using namespace std; class base { public: base(int cnt) { resource=new int[ent]; } ~base() { delete[]
admin
2020-07-23
50
问题
有如下程序段:
#include<iostream>
using namespace std;
class base
{
public:
base(int cnt)
{
resource=new int[ent];
}
~base()
{
delete[]resource;
}
virtual void show()
{
cout<<"base"<<endl;
}
int*resource:
};
class derived:public base
{
public:
derived(int cnt):base(cnt)
{
resource=new float[cnt];
}
~derived()
{
delete[]resource;
}
void show()
{
cout<<"derived"<<endl;
}
float*resource;
};
上述程序使得derived对象中的动态内存空间有可能不被释放,有内存泄漏风险,原因是( )。
选项
A、base类是抽象类
B、derived类的析构函数没有释放基类的动态内存
C、base类的析构函数不是虚函数
D、derived类的reSotlrce与公有继承得到的resource同名
答案
C
解析
基类base中的数据成员resource为整型指针变量,派生类derived中的数据成员resource与基类base中的同名,但类型为浮点型指针变量,基类base中构造函数使用new为resource(整型指针)分配了内存空间,在析构函数中释放;派生类derived的构造函数在成员初始化类表中调用base的构造函数构造对象的基类部分,然后在构造函数体内使用new为resource(浮点型指针)分配了内存空间,在析构函数中释放浮点型resource指针;由于基类base中的析构函数未定义为虚函数,所以派生类derived中的析构函数在被调用时,不会再调用基类base中的析构函数,导致基类base中的整型指针变量resource无法释放,造成内存泄漏。故本题答案为C选项。
转载请注明原文地址:https://jikaoti.com/ti/0yl0FFFM
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
在一个程序文件中有如下语句:externintvar;关于这个语句,下列表述中错误的是
下列有关类成员的叙述中,正确的是
下列字符串中,不可以用做C++标识符的是()。
在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是
定义无符号整数类为UInt,下面可以作为类UInt实例化值的是( )。
一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。
已知一运算符函数没有参数。下列关于该运算符函数的表述中错误的是
在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数()。
如果有以下定义及初始化:inta=3,*p=&a;则由此可以推断,*p的值是()。
数据库管理系统是()。
随机试题
枕大孔疝可以造成()
子宫内膜异位症引起的月经失调,主要表现为
属于寒淫证临床表现的是
背景资料:A公司承建B港某码头项目,部分工程分包给C公司、D公司,工程由E设计院设计,G监理公司监理。由()对该项目施工现场的安全生产负总责。
切块分包合同方式按发包方式,可分为平行发包和()。
《环境噪声污染防治法》规定,在城市市区噪声敏感建筑物集中区域内,禁止夜间进行产生环境噪声污染的建筑施工作业,但抢修、抢险作业和因生产工艺上要求或者特殊需要必须连续作业的除外。因特殊需要必须连续作业的,必须有()或者其有关主管部门的证明。
当市场利率上升时,债券价格也上升。()
我国的《教师法》颁布于()。
某经济学大师在对“看不见的手”的分析中提到:“……他经常是通过追求个人利益无意中为社会增加了福利,而且比他在有意为社会增加的时候说得更有意义。”这句话向我们表明了()。
以下程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。#include<stdio.h>main(){intn,s;printf("Enteranumber:");scanf("%d",&n);
最新回复
(
0
)