프로그래밍 언어 23

[Effective C++]항목 9~12 : 생성자, 소멸자 및 대입 연산자 2

항목 9 : 객체 생성 및 소멸 과정에서는 자신의 가상 함수를 호출하면 위험하다.객체 생성 시점에서는 조상 클래스의 생성자부터 호출되어 아래로 내려간다. 한 후손 클래스가 생성된다고 하자. 그러면 최상위 조상의 생성자부터 호출하며 내려갈것이다. 이때 중간의 한 조상이 생성자에서 자신의 가상함수를 호출하면 그 생성이 후손 클래스의 생성과정임에도 불구하고 호출한 자기자신의 실제 함수가 호출되어 버린다. 이는 아직 조상 자신까지의 생성만 진행되고 후손 부분의 생성은 아직 진행되지않아 현재 생성 시점에서는 실제 타입이 조상 자신의 타입으로 인식되기 때문이다. 만약 이것이 노린 것이라면 모르겠지만 보통 가상함수는 실제 타입의 함수를 호출하려는 목적이 대부분이므로 이를 생각하며 사용하는 것이라면 피해야한다. 소멸자..

[Effective C++]항목 5~8 : 생성자, 소멸자 및 대입 연산자 1

항목 5 : 클래스에서 자동으로 생성되는 메소드들 C++에서는 우리가 따로 작성하지 않으면 컴파일러가 자동으로 생성하는 기본 메소드들이 있다. 기본 생성자 각 멤버의 기본 생성자 호출 생성자가 없을 시 자동으로 생성 복사 생성자 각 멤버 간 복사 생성자 호출복사 생성자, 이동 생성자, 대입 연산자 중 하나라도 있을 시 생성안됨 복사 대입 연산자 각 멤버 간 복사 대입 연산자 호출 복사 대입 연산자, 이동 생성자, 대입 연산자 중 하나라도 있을 시 생성안됨 이동 생성자 각 멤버 간 이동 생성자 호출 이동 생성자, 복사 생성자, 복사 대입 연산자, 이동 대입 연산자, 소멸자 중 하나라도 있을 시 생성안됨 이동 대입 연산자 각 멤버 간 이동 대입 연산자 호출 이동 대입 연산자, 복사 생성자, 복사 대입 연산자..

[Effective C++]항목 1~4 : C++ 기초 사고방식

항목 1 : C++은 언어들의 연합체이다. C++은 다중패러다임 프로그래밍 언어로써 절차,객체 지향 프로그래밍, 함수형 프로그래밍, 일반화 프로그래밍등의 다양한 프로그래밍 패러다임을 적용할 수 있다. 이러한 C++을 공부할땐 다소 혼란스러울 수 있는데 이러한 C++을 다음 네가지 영역으로 구분한다면 도움이 될 수 있다. C : 기존 C에서도 제공되던 부분들이며 C의 규칙들을 따른다. 객체 지향 개념의 C++: C++로 넘어오며 추가된 클래스등의 객체지향 개념들이다. 템플릿 C++ : C++의 강력한 기능중 하나인 템플릿을 활용하는 부분들이다. 일반화에 큰 힘을 준다. STL : 표준 라이브러리로 컨테이너와 알고리즘, 반복자와 함수 객체들로써 돌아간다. C++을 구성하고 있는 이 네가지 부분에 대한 패러다..