2017-02-09 1 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
당신이 작성 했는가

과 B 형의 클래스 B. 포인터에서 파생 클래스 D의 객체를 그 주소 은 "클래스 D의 B 부분"을 가리키는 지시와 포인터입니다. 생성 된 객체는 여전히 클래스 D이며 클래스 D 포인터로 형 변환 될 수 있습니다.

도 (대표 예는 dogcat 클래스 animal 클래스를 확장하는 전류 범위에서 D 급 기능의 사용을 제한하거나 모두 동일한 기본 클래스로부터 파생되어야 종류와 오브젝트들의리스트를 생성하는 방법 모두 pets<animal> 목록에 넣습니다.

관련 문제