使用派生类分配基类指针的内存 我是C++新手。我正在学习C++ OOPS概念。strong>是否允许使用派生类(D)分配基类(B)指针的内存? B *a = new D();
我的代码:使用派生类分配基类指针的内存 我是C++新手。我正在学习C++ OOPS概念。strong>是否允许使用派生类(D)分配基类(B)指针的内存? B *a = new D();,c++,pointers,heap-memory,C++,Pointers,Heap Memory,我的代码: #include <iostream> using namespace std; class B { public: B() { cout<<"B constructor"<<endl; } ~B() { cout<<"B Destroctur"<<endl; }
#include <iostream>
using namespace std;
class B
{
public:
B()
{
cout<<"B constructor"<<endl;
}
~B()
{
cout<<"B Destroctur"<<endl;
}
};
class D : public B
{
public:
D()
{
cout<<"D constructor"<<endl;
}
~D()
{
cout<<"D Destroctur"<<endl;
}
};
int main()
{
B *a = new D();
delete a; // Is valid?
}
只要您声明基本析构函数为虚拟,它就有效:
virtual ~B() { /*B destructot code*/}
您所做的是创建类D的对象,该对象派生自类B。已创建对象的地址分配给的类型B指针是一个指针,其指令指向“类D的B部分”。创建的对象仍然属于类D,可以转换为类D指针
这也是一种在当前范围内限制使用D类功能的方法,或者创建一个具有不同类型的对象列表,这些对象都必须从相同的基类派生(典型示例是
狗和猫类扩展动物类,并且根据您的代码都放在宠物列表中),输出将是
B constructor
D constructor
B Destructor ==> Base class
B constructor
D constructor
D Destructor ==> Derived class
B Destructor ==> Base class
派生类内存不会被删除。为了避免这种情况,我们需要在基类析构函数中使用virtual关键字
virtual ~B()
{
cout<<"B Destroctur"<<endl;
}
没有“基类指针的内存”这样的东西。这是一个开始学习基础知识的好地方:为什么需要基类指针作为虚拟的,请参阅
B constructor
D constructor
D Destructor ==> Derived class
B Destructor ==> Base class