생성자 2

C++ 가상 복사 생성자(Virtual Copy Constructor) 총정리

1. 가상 복사 생성자의 개념 이전 가상 생성자 글에서 런타임까지 유형이 결정되지 않는 객체를 생성하는 방법을 살펴봤다. 객체가 정확한 클래스 유형인지 알지 못한 채 생성하는 것이 가능할까? 여기서 등장하는 것이 바로 가상 복사 생성자다. 이것이 이 문제를 해결한다. 간혹 우리는 기존의 다른 객체로부터 객체를 구성해야 할 필요가 있을 수 있다. 그리고 엄밀히 말하면, 복사 생성자가 같은 일을 한다. 새로운 객체의 초기 상태는 기존의 다른 객체 상태를 기반으로 한다. 컴파일러는 객체가 다른 객체로부터 인스턴스화될 때 복사 생성자를 호출한다. 그러나 컴파일러는 적절한 복사 생성자를 호출하기 위해 구체적인 유형 정보가 필요하다. 예시: #include using namespace std; class Base ..

C++ 2024.04.09

C++ 가상 생성자(Virtual Constructor) 총정리

1. 가상 생성자의 개념클래스 생성자를 C++로 가상화하여 다형성 객체를 생성할 수 있을까? Nope. C++는 정적으로 입력된 언어이기 때문에 C++ 컴파일러는 객체를 다형성으로 생성하는 것이 무의미하다. 컴파일러는 객체를 생성하기 위해 클래스 유형을 알고 있어야 한다. 즉, 어떤 유형의 객체를 생성할 것인지는 C++ 컴파일러 관점에서 컴파일 타임 결정이다. 만약 생성자를 가상화한다면 컴파일러는 오류를 플래그로 지정한다. 실제로 생성자 선언문에는 인라인을 제외하고는 다른 키워드가 허용되지 않는다. 실제 시나리오에서, 어떤 입력을 기반으로 클래스 계층 구조에서 파생된 클래스 객체를 생성해야 한다. 즉, 객체 생성과 객체 유형은 긴밀하게 연결되어 있기 때문에 수정 사항을 확장해야 하는 것이다. 가상 생성자..

C++ 2024.04.08
728x90