C++/C++

[C++] delete와 소멸자 ~class()

sihyeong 2022. 10. 13. 01:13

간단 요약 :

  • delete() 자체 null 체크 기능 포함
  • delete() 호출 시 메모리 할당 전 개체의 소멸자(~class() )를 호출함

관련한 문제 발생과 해결 과정

1. 템플릿을 사용한 싱글톤 클래스를 생성 후 원하는 곳에 상속시켜 쓸 예정이었음

 

2. 싱글톤 상속 후 메모리 해제 과정(AAA::DestroyInstance() 호출) 중 오류가 남

3. 찾아보니 상속받은 AAA클래스에서 public을 제외한 상속 접근 지정자에서 소멸자(~AAA() )를 정의하면 오류가 남
4. delete 할 때 instance 참조 때문에 접근 지정자에 영향을 받음

5. DestroyInstance() 내부의 delete instance 실행 시 AAA의 ~AAA() / protected 접근 불가

 

해결법 :

상속받은 클래스에서 소멸자 사용 X

상속받은 클래스에서 public: 에서 소멸자 사용

소멸자 사용 X + 소멸자를 대체할 종료함수 사용

 

 

 

 

참고

https://learn.microsoft.com/ko-kr/cpp/cpp/delete-operator-cpp?view=msvc-170