单选题 有如下程序段:#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对象中的动态内存空间有可能不被释放,有内存泄漏风险,原因是( )。
【正确答案】 C
【答案解析】解析:基类base中的数据成员resource为整型指针变量,派生类derived中的数据成员resource与基类base中的同名,但类型为浮点型指针变量,基类base中构造函数使用new为resource(整型指针)分配了内存空间,在析构函数中释放;派生类derived的构造函数在成员初始化类表中调用base的构造函数构造对象的基类部分,然后在构造函数体内使用new为resource(浮点型指针)分配了内存空间,在析构函数中释放浮点型resource指针;由于基类base中的析构函数未定义为虚函数,所以派生类derived中的析构函数在被调用时,不会再调用基类base中的析构函数,导致基类base中的整型指针变量resource无法释放,造成内存泄漏。故本题答案为C选项。