TB, TC 클래스는 TA 추상 클래스를 상속 받아서 처리하였습니다.
TA *p = new TB() or new TC() 로 상황에 따라 객체를 생성하여 처리하였는데,
객체의 소멸 delete p 하면 TA의 소멸자가 호출되어 버리네요. 상속된 클래스에서 자체적으로
사용한 Resource가 있는데, 상위 객체의 소멸자를 호출해서 다른 Resource를 해제하지 못하는
상황이 발생하는데.. 그냥 down_cast 연산으로 해야 하나요?
class TA
{
public:
UnicodeString m_Msg;
public:
TA() {ShowMessage("TA Constructor");};
~TA() {ShowMessage("TA Destructor");};
virtual void Message(UnicodeString sMsg) = 0;
};
class TB : public TA
{
public:
TB() { ShowMessage("TB Constructor"); }
~TB() { ShowMessage("TB Destructor"); }
void Message(UnicodeString sMsg) { ShowMessage(sMsg); }
};
class TC : public TA
{
public:
TC() { ShowMessage("TC Constructor"); }
~TC() { ShowMessage("TC Destructor"); }
void Message(UnicodeString sMsg) { ShowMessage(sMsg); }
};
이들 클래스에 대한 객체 생성 및 사용된 코드..
TA *p = new TB(); // 순서대로 TA(), TB() 호출됨
..
p->m_Msg = "abcd";
..
delete (TB *)p; // ~TB() 호출됨, delete p; 하면 ~TA() 호출됨
..
p = new TC(); // 순서대로 TA(), TC() 호출됨
..
p->m_Msg = "abcd";
..
delete (TC *) p; // ~TC() 호출됨. delete p하면 ~TA()호출됨.
delete p 하면 알아서 상속받은 클래스의 파괴자를 호출할 수는 없나요?
반드시 type cast를 해줘야 하는 지? 소거할 때마다 하부 class가 뭔지 찾아야 하는 어려움 때문에.. 불편하네요..
감사합니다.
|