C++ 소멸자에 virtual을 사용하는 이유 virtual 소멸자를 사용하면 다형성을 올바르게 처리할 수 있습니다. 부모 클래스의 포인터를 통해 자식 클래스의 객체를 삭제할 때, 자식 클래스의 소멸자도 호출되어 자원 해제가 올바르게 이루어집니다. 그렇지 않으면 자식 클래스에서 할당한 리소스를 해제하지 못할 수 있습니다. 따라서, 클래스를 상속할 계획이 있는 경우, 특히 동적 메모리를 사용하는 경우 소멸자는 반드시 virtual로 선언해야 합니다. C++ 2024.12.15
C++ virtual 내부 작동 방식 C++ 에서 클래스를 컴파일하면 그 클래스의 모든 메서드를 담은 바이너리 객체가 생성됩니다. 이 때, virtual로 선언되지 않은 메서드를 호출하는 부분을 컴파일 시간에 결정된 타입의 코드로 교체합니다. 이를 정적 바인딩(static binding) 또는 이른 바인딩(early binding)이라 부릅니다. 메서드를 virtual로 선언하면 vtable(가상 테이블)이라 부르는 특수한 메모리 영역을 활용해서 가장 적합한 구현 코드를 호출합니다. virtual 메서드가 하나 이상 정의된 클래스마다 vtable이 존재하는데, 이 클래스로 생성된 객체마다 vtable에 대한 포인터를 갖게 됩니다. virtual 메서드의 구현 코드에 대한 포인터는 바로 이 vtable에 담겨 있습니다. 그래서 객체에 대해 메.. C++ 2024.12.14