티스토리 뷰
2. 생성자, 소멸자 및 대입 연산자
항목 5 : C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있습니다.
항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자
- 컴파일러에서 자동으로 제공하는 기능을 허용치 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현은 하지 않은 채로 두십시오. Uncopyable과 비슷한 기본 클래스를 쓰는 것도 한 방법입니다.
항목 7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자
- 다형성을 가진 기본 클래스에는 반드시 가상 소멸자를 선언해야 합니다. 즉 어떤 클래스가 가상 함수를 하나라도 갖고 있으면, 이 클래스의 소멸자도 가상 소멸자이어야 합니다.
- 기본 클래스로 설계되지 않았거나 다형성을 갖도록 설계되지 않은 클래스에는 가상 소멸자를 선언하지 말아야 합니다.
항목 8 : 예외가 소멸자를 떠나지 못하도록 붙들어 놓자
- 소멸자에서는 예외가 빠져나가면 안 됩니다. 만약 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 어떤 예외이든지 소멸자에서 모두 받아낸 후에 삼켜 버리든지 프로그램을 끝내든지 해야 합니다.
- 어떤 클래스의 연산이 진행되다가 던진 예외에 대해 사용자가 반응해야 할 필요가 있다면, 해당 연산을 제공하는 함수는 반드시 보통의 함수(즉, 소멸자가 아닌 함수)이어야 합니다.
항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
- 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 마세요. 가상 함수라고 해도, 지금 실행중인 생성자나 소멸자에 해당되는 클래스의 파생 클래스 쪽으로는 내려가지 않으니까요.
항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자
항목 11 : operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자
- operator=을 구현할 때, 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리하도록 만듭시다. 원본 객체와 복사대상 객체의 주소를 비교해도 되고, 문장의 순서를 적절히 조정할 수도 있으며, 복사 후 맞바꾸기 기법을 써도 됩니다.
항목 12 : 객체의 모든 부분을 빠짐없이 복사하자
- 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠뜨리지 말고 복사해야 합니다.
- 클래스의 복사 함수 두 개를 구현할 때, 한쪽을 이용해서 다른 쪽을 구현하려는 시도는 절대로 하지 마세요. 그 대신 공통된 동작을 제3의 함수에 분리해 놓고 양쪽에서 이것을 호출하게 만들어서 해결합시다.
- James Song
'Books_tech' 카테고리의 다른 글
다시 읽는 <Effective C++> Chapter 4 요약 (0) | 2015.11.06 |
---|---|
다시 읽는 <Effective C++> Chapter 3 요약 (0) | 2015.11.04 |
다시 읽는 <Effective C++> Chapter 1 요약 (0) | 2015.11.02 |
<Effective Modern C++> Item 2 요약 (0) | 2015.09.04 |
<Effective Modern C++> Item 1 요약 (0) | 2015.08.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- #csharp
- #build2016
- #스콧마이어스
- Effective Modern C++
- #uwp
- #EffectiveModernCpp
- #세미나
- #제럴드와인버그
- #scottmeyers
- #mva
- 객체 지향 설계
- #팀개발
- #클린코드
- 상속
- #프로그래밍심리학
- #자녀교육
- Effective C++
- #알고리즘
- #techdays2015
- #cpp
- #cplusplus
- #코드최적화
- #레거시코드
- #ndc
- #임백준
- Scott Meyers
- 책
- #ModernCPP
- #마이클페더스
- #로버트마틴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함