2017-02-09 99 views
1

我是C++中的新手。我正在学习C++ oops概念。 是否允许使用派生类(D)分配基类(B)指针的内存?使用派生类分配基类指针的内存

B *a = new D(); 

我的代码:

#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? 
} 

而且,它是有效的释放基类指针的内存?

delete a; 
+0

http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – SingerOfTheFall

+0

有作为“基类指针的记忆”没有这样的事。 – immibis

+0

这是一个开始学习基础知识的好地方:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – user2079303

回答

4

它是有效的,只要你申报的基础析构虚:

virtual ~B() { /*B destructot code*/} 
+1

为什么你需要将基础知识作为“虚拟” ,请参阅[这里](http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors) – sameerkn

1

你是被创造什么和d类的对象,它是从B类指针派生类型B的地址创建对象被分配给的是指针,其指令指向“B部分D类”。创建的对象仍然是D类,可以转换为D类指针。

这也是限制d类官能团的使用在一个当前范围或创建具有不同类型的对象,其必须全部由相同的基类派生的列表(典型的例子是dogcat类延伸animal类的方式并且都放在pets<animal>列表)

相关问题