본문 바로가기

소멸자2

[ C++ ] 가상 소멸자( Virtual Destructor ) 말 그대로 virtual로 선언된 소멸자를 가상 소멸자( Virtual Destructor )라고 한다. 근데 왜 소멸자에 virtual 선언이 필요할까? 먼저 예제를 보자. ( * 혹시 VS에서 위 코드를 작성하다가 다음과 같은 에러가 발생한 경우, "const char * 형식의 인수가 char * 형식의 매개 변수와 호환되지 않습니다" 프로젝트( 오른쪽 클릭 ) > 속성 > C/C++ > 언어 > 준수 모드 > 아니오로 바꿔주면 해결된다. VS 2015에는 가능한데 VS 2017부터 준수 모드가 생겨서 생긴 문제이다. ) 결과에서 보이듯이 객체의 소멸을 A형 포인터로 명령하니, A 클래스의 소멸자만 호출되었다. 따라서 strB가 남아있어, 메모리 누수가 발생하게 된다. 즉, 객체의 소멸과정에서는 포.. 2019. 10. 10.
[ C++ ] 생성자와 소멸자 그리고 멤버 이니셜라이저( Member Initializer ) 생성자(constructor)는 객체 생성 시 딱 한번 호출된다. 또한 클래스의 이름과 함수의 이름이 동일하고 반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다. 또한 생성자도 함수이기에 오버 로딩과 매개변수에 디폴트 값 설정도 가능하다. 하지만 이렇게 생성자를 통해서 멤버변수를 초기화하는 것은 불편하기에 C++은 멤버 이니셜라이저(Member Initializer)도 지원한다. 멤버(Member)는 클래스 내의 멤버 변수 혹은 멤버 변수를 뜻하고 이니셜 라이저(Initializer)는 초기화라는 뜻이다. 그러면 초기화를 어떻게 하는지 살펴보면 이렇게 생성자 함수 뒤에 : 를 붙여서 사용하면 된다. num(A_num)은 num = A_num과 동일한 의미를 가진다. "즉, 멤버 이니셜 라이저를 사용.. 2019. 9. 24.