다중 상속을 받은 클래스를 생성하는 것 만큼
삭제하는것이 쉽지 않다.
이 문제의 발생 원인은 다중 상속에서 인해,
Construct 와 Destruct 의 역할 분배에서 생기는 문제 인듯 싶다.
하지만, 이는 정확한 정보는 아니고 오로지 개인적인 짐작에 불과하다.

하지만 현재 제작중에 발생한 문제이기 때문에, 이 문제를 언급한다.

class A : public CA, public CB {};

가 있다.
이를 생성하기 위해 new A 를 해서 CB *pB 에다 담는다.
CB *pB = new A();

그후에 이를 지우려 하는데, Assert 에러를 낸다.
그 이유가 CA로써 지우는 건지 CB로써 지우는건지 명확치 않아서 발생하는 것 같았다.
그래서 약간 변형을 가했다.

   delete (CA *)pB;

이렇게 지우자 문제가 사라졌다.
게다가, CB에서는 Construct와 Destruct가 없는 상황이기 때문에, 더욱 이렇게 할 수 밖에 없는듯 싶다.

이 관계를 잘 파악해야 하겠다.
728x90

+ Recent posts