가상함수2 [C++] class의 메모리 할당방법 (virtual 멤버함수, 일반멤버함수, 상속) 여러 가지 class의 메모리 할당에 대해 알아보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include using namespace std; class Person{ public: char name; char address; }; int main() { Person gildong; cout 2019. 11. 5. [Effective C++] 항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 오늘의 주제는 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말자! 이다. 파생클래스안의 생성자 소멸자에서 라는 중요한 문장이 빠져있다. 기본클래스나 파생클래스에서 실제로 생성자 혹은 소멸자 안에서 가상함수를 호출하게되면 컴파일에러가 난다. ( 비주얼스튜디오 컴파일러는 그렇다.) 왜나하면 파생클래스 객체의 기본 클래스 부분이 생성되는 동안은, 그 객체의 타입은 바로 기본클래스라는 점이다. 따라서 호출되는 가상 함수는 모두 기본 클래스의 것으로 결정(resolve)될 뿐만 아니라 런타임 타입 정보를 사용하는 언어 요소(dynamic_cast, typeid)를 사용한다 해도 이 순간엔 모두 기본 클래스 타입의 객체로 취급한다. 소멸자도 마찬가지 같은 의미로 생성자의 일반 함수에서 가상함수를 호출하는 경우도.. 2019. 7. 23. 이전 1 다음