Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Effective C++ 정리
Chapter 1, chapter2
C++를 언어들의 연합체로 바라보는 안목
• C + 클래스 != C++
• 템플릿은 프로그램 설계에 새로운 사고방식 제공
• STL은 확장성에 대한 지평을 염
• C++은 다중 패러다임 프로그래밍 언어
->절차적, 객체...
#define 보다 const, enum ,inline
• 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다
->기호 테이블에 이름이 없기에 디버깅이 힘들다.
• 따라서 매크로 대신 상수를 쓰는 것이 좋다 – co...
Const를 적극적으로 활용하자
• Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다.
->외부 변경을 불가능하게 함.
• Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다.
• 정적 멤버, 비...
객체를 사용하기 전에 반드시 초기화
• 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함
-> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를
해주는 것.
• 생성자에서 그 객체의 모든 것을 초기화하...
C++이 만들어 호출해버리는 함수들 주의
• 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은
원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사
• 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 ...
다형성을 가진 기본 클래스에서는 소멸자
를 반드시 가상소멸자로 선언
• 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가
하날도 들어 있는 경우로 한정할 것.
• 추상 클래스는 기본 클래스로 쓰이고, 가상 소...
예외의 상황이 소멸자를 떠나지 못하게 막
기
• 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다.
• 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그
처리는 소멸자에서 어떻게든 처리해야 한다.
• 예외에...
객체 생성 및 소멸 과정 중에는 절대로 가
상 함수를 호출하지 말 것
• 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파
생 클래스 부분보다 먼저 호출
-> 기본 클래스가 생성 중에는 아직 파생 클래스...
Operator= 에서는 자기대입에 대한 처리
가 빠지지 않도록 해야한다
• 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에
대비해야 한다.
• 자기 참조의 가능성이 있는 코드에 대비해야 한다.
-> ...
객체의 모든 부분을 빠짐없이 복사할 것
• 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자
• 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음
• 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 ...
Nächste SlideShare
Wird geladen in …5
×

Effective c++ 정리 1~2

1.175 Aufrufe

Veröffentlicht am

Effective c++ 1~2챕터 정리

Veröffentlicht in: Automobil
  • Als Erste(r) kommentieren

Effective c++ 정리 1~2

  1. 1. Effective C++ 정리 Chapter 1, chapter2
  2. 2. C++를 언어들의 연합체로 바라보는 안목 • C + 클래스 != C++ • 템플릿은 프로그램 설계에 새로운 사고방식 제공 • STL은 확장성에 대한 지평을 염 • C++은 다중 패러다임 프로그래밍 언어 ->절차적, 객체지향, 함수식, 일반화, 메타프로그래밍 개념까지 지원 -> C++의 효과적인 프로그래밍을 위해서는 4가지의 특징이 적재 적소에 잘 어우러져야 한다.
  3. 3. #define 보다 const, enum ,inline • 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다 ->기호 테이블에 이름이 없기에 디버깅이 힘들다. • 따라서 매크로 대신 상수를 쓰는 것이 좋다 – const • 클래스 상수를 #define으로 만들면 안 된다. ->쓸 수도 없고, 객체지향의 캡슐화 혜택도 받을 수 없다. • 기존 메크로를 이용한 함수가 아닌 템플릿을 이용해야 한다. -> 매크로를 될 수 있으면 적게 쓰는 것이 좋다.
  4. 4. Const를 적극적으로 활용하자 • Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다. ->외부 변경을 불가능하게 함. • Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다. • 정적 멤버, 비정적 데이터 멤버 모두 상수로 선언 가능 • 포인터와 포인터가 가리키는 대상에도 const 사용이 가능하다. • 함수 반환 값에 const를 이용하면 효율과 안정성을 가진다. • 멤버 함수에 붙는 const 키워드는 해당 멤버 함수가 상수 객체에 대해 호출될 함수라는 것을 의미
  5. 5. 객체를 사용하기 전에 반드시 초기화 • 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함 -> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를 해주는 것. • 생성자에서 그 객체의 모든 것을 초기화하자(대입과 혼동 X) • 클래스 데이터 멤버는 모두 초기화 리스트로 초기화 할 것 • 상수이거나 참조자로 되어 있는 데이터 멤버의 경우는 반드시 초 기되어야 한다. -> 상수와 참조자는 대입 자체가 불가능
  6. 6. C++이 만들어 호출해버리는 함수들 주의 • 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은 원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사 • 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 꼭 필요한 클래스를 만든다면 컴파일러가 눈치 없이 기본 생성자를 만들지 는 않는다. • 컴파일러가 만들어낸 함수가 필요없으면 확실히 이들의 사용을 금해버리는게 좋다. ->컴파일러가 자동으로 함수생산하는 것을 막으려면 private 멤 버로 선언하면 된다.(외부로부터의 호출 차단)
  7. 7. 다형성을 가진 기본 클래스에서는 소멸자 를 반드시 가상소멸자로 선언 • 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가 하날도 들어 있는 경우로 한정할 것. • 추상 클래스는 기본 클래스로 쓰이고, 가상 소멸자를 가지는게 원칙이다. • 순수 가상 함수가 있으면 그것이 바로 추상 클래스다. ->즉 추상 클래스는 순수 가상 소멸자를 선언해야하고, 기본 클래 스가 아니거나, 다형성을 갖지 않는 클래스에는 가상 소멸자를 선언하지 말아야 한다.
  8. 8. 예외의 상황이 소멸자를 떠나지 못하게 막 기 • 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다. • 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그 처리는 소멸자에서 어떻게든 처리해야 한다. • 예외에 대한 사용자의 반응이 필요하더라도 소멸자가 아닌 보통 의 함수로 제공해야 한다. • 예외를 그냥 무시하는 것은 좋지 않다. ->무엇이 잘못됐는지 알려주는 정보를 무시하기 때문이다. • 소멸자에서 적절하게 처리해야 한다.
  9. 9. 객체 생성 및 소멸 과정 중에는 절대로 가 상 함수를 호출하지 말 것 • 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파 생 클래스 부분보다 먼저 호출 -> 기본 클래스가 생성 중에는 아직 파생 클래스가 생성이 되지 않았는데, 가상 함수를 호출하는 것은 초기화 하지 않은 어떤것 에 대한 접근을 하겠다는 것, 매우 위험. • 기본 클래스 생성 과정에는 가상함수가 먹히지 않는다. • 생성자, 소멸자에서 가상함수를 호출하면 안 된다. • 기본클래스 생성 중에는 생성자나 소멸자에 해당하는 클래스의 파생 클래스 쪽으로는 내려가지 않는다.
  10. 10. Operator= 에서는 자기대입에 대한 처리 가 빠지지 않도록 해야한다 • 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에 대비해야 한다. • 자기 참조의 가능성이 있는 코드에 대비해야 한다. -> 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리해야한다. • 원본과 복사대상 객체의 주소비교, 문장의 순서 조정, 복사 후 맞 바꾸기 기법 등등의 방법이 있다. -> 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에 넘겨지는 객체들이 사실 같은 객체인 경우에 동작을 반드시 확인 해야한다.
  11. 11. 객체의 모든 부분을 빠짐없이 복사할 것 • 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자 • 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음 • 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠드리지 말고 복사해야 한다. • 클래스의 복사 함수 두 개 구현 시 한쪽을 이용해 다른 쪽을 구현 하려는 짓은 하지 말 것. • 어떤 클래스가 상속한 기본 클래스의 복사 함수가 있다면 그 함 수도 호출을 해주어야 한다.

×