목록2026/05 (2)
Sonji-log
1. 이 항목이 왜 중요한가소멸자(destructor)는 객체의 마지막 정리 담당자다. 메모리를 해제하고, 파일을 닫고, mutex를 풀고, 데이터베이스 연결을 종료한다. 앞서 Cp 7.에서 소멸자가 제대로 호출되는지가 중요하다고 봤다면, 이번에는 호출된 소멸자가 어떤 식으로 끝나야 하는가를 다룬다.겉보기에는 이런 코드가 자연스럽다.class DBConnection{public: static DBConnection create(); void close(); // 실패하면 예외를 던질 수 있다};class DBConn{public: explicit DBConn(const DBConnection& connection) : db(connection) {} ~DBConn..
1. 이 항목이 왜 중요한가C++에서는 기본 클래스(base class) 포인터로 파생 클래스(derived class) 객체를 다루는 일이 아주 흔하다. 다형성(polymorphism)을 쓰는 코드라면 거의 항상 이런 형태가 나온다.Base* p = new Derived();// ...delete p;겉보기에는 꽤 자연스럽지만, 여기에는 함정이 하나 숨어 있다.만약 Base의 소멸자가 가상 함수(virtual function)가 아니라면, delete p를 했을 때 무슨 일이 벌어질까?결론부터 말하면 정의되지 않은 동작(undefined behavior)이 수행된다. 보통은 다음과 같은 일이 일어난다.객체의 기본 클래스 부분(Base)은 소멸된다.하지만 파생 클래스 부분(Derived)은 소멸되지 않는..