상세 컨텐츠

본문 제목

상속받은 객체 DELETE 또는 하나의 클래스에 여러개의 파생상속 DELETE 주의사항

본문

반응형
728x170
 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

//기본 상본 AAA 를 만든다
class AAA
{
   public:
   AAA();
   ~AAA();
   virtual void init();
}

class BBB : public AAA
{
   public:
   BBB();
   ~BBB();
   void init();
   int a;
   int b;

}

class CCC : public AAA
{
   public:
   CCC();
   ~CCC();
   void init();
   int a;
}


map<int,AAA*> mTest;
mTest[1] = new BBB();
mTest[2] = new CCC();

//이렇게 되었다고 하자 그러면 해제시 어떻게 될까.

Deletefunc()
{
    AAA* p = NULL;
    for(map<int,AAA*>::iterator it = m_mTest.begin(); it != m_mTest.end(); it++)
   {
      p = (*it).second;
      SAFE_DELETE(p);
   }

}

// 보기와 같이 삭제는 되지만 만약 AAA기본 메모리가 10이라할때 BBB,CCC 모두 변수, 데이터를 추가 하였으므로 메모리 용량이 틀리다 그러므로 메모리가 틀린만큼 메모리 릭이 발생한다.

그러므로

BBB* b = (BBB*)mTest[1];
CCC* c = (CCC*)mTest[2];

이런식으로 지정된 메모리를 해제해주어야 한다 하지만 꼭 그렇게 까지 할 필요는 없다.
기본 AAA 클래스 소멸자에 virtual 을 해주면 간단히 해결된다. 즉 메모리를 찾아 소멸해준다는 것이다.


class AAA
{
   public:
   AAA();
   virtual ~AAA(); //이렇게 해주면 보통 상속상태에서 불러들일때 삭제가능하다.
   virtual void init();
}


http://www.gpgstudy.com/forum/viewtopic.php?t=17555

 

 

 

=================================

=================================

=================================

 

 

반응형
그리드형


관련글 더보기

댓글 영역