개발자의 길/Effective C++ 5

[Effective C++] Chapter 5 구현

항목 26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 쓸데없는 생성자와 소멸자 호출을 막기 위해, 변수 정의는 최대한 늦추도록 하자. 또한, for 문 안에서 변수를 정의해야할 경우, 생성자/소멸자 호출과 대입연산 중 어느것이 더 자원을 많이 먹을지 고려한 다음 사용하자 항목 27: 캐스팅은 절약, 또 절약! 잊지 말자 구형 스타일의 캐스트가 아닌 C++ 스타일의 캐스트를 선호하자, 발견하기도 쉽고 의도파악에 도움이 된다. 가능한 캐스팅을 피하되, 어쩔수 없이 써야 된다면 함수 안에 숨길 수 있도록 하자. 그러면 최소한 사용자는 자신의 코드에는 캐스팅을 넣지 않을 수 있다. 항목 28: 내부에서 사용하는 객체에 대한 핸들을 반환하는 코드는 되도록 피하자 캡슐화 정도를 높이고, 상수멤버 함..

[Effective C++] Chapter 4 설계 및 선언

항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 인터페이스는 일관성 있는 네이밍, 새로운 타입을 제공하여 함수 인자로 받도록 하여 잘못된 동작 사용 못하도록 하기, 자원 관리 책임을 사용자에게 주지 않기 등이 있다. shared_ptr 을 사용하면 자원에 대한 권한은 라이브러리에 있게 된다. 항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자 클래스를 설계할 때는 기본 타입을 정의하는 것만큼 고민을 하자. 책에 정리되어 있는 모든 고려사항을 참고하여 클래스를 짜 보도록 하자. 항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다 함수를 호출할때 기본타입을 제외하고는 복사 생성자가 호출될 가능성을 없애기 위해, 상수객체 참조자..

[Effective C++] Chapter 3 자원 관리

항목 13: 자원 관리에는 객체가 그만! 스마트 포인터를 활용하여 별도로 객체 관리를 하지 않아도 되도록 만들자. std::auto_ptr, std::shared_ptr 을 활용 항목 14: 자원 관리 클래스의 복사 동작에 진지하게 고찰하자 RAII 객체를 복사할 때, 복사를 수행한 후 원래 객체가 해제가 되어 버리면 복사를 한 객체 쪽에서 해제 된 객체를 가질 가능성이 있다. 레퍼런스 카운터를 쓰거나 복사를 금지하는 방법을 활용하자 항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 캡슐화는 사용하기 편하고 실수를 줄이기 위해 만든 것이지, 반드시 데이터를 무조건 접근 금지하도록 하기 위한 것은 아니다. 암시적 변환이나 Get() 함수등을 통해 접근을 가능하도록 만들면 해..

[Effective C++] Chapter 2 생성자, 소멸자 및 대입 연산자

항목 5 : C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자.이유 : 컴파일러는 클래스의 생성자, 소멸자 등을 자동으로 만들어 내는데, 만약 멤버 변수로 포인터 등이 존재할 경우. 완전한 깊은 복사를 수행하지 않게 된다. 해결 : 클래스 선언시 생성자, 복사 생성자, 복사 대입 생성자, 소멸자, 이동 생성자( c++ 11) 이동 복사 생성자 (c++ 11) 등을 명시적으로 선언해두자. 항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자이유 : 구조적으로 복사되면 안되는 경우 ( 단 하나만 존재하는 클래스 등 ) 클래스를 사용하는 쪽에서 자동으로 생성된 복사 생성자를 이용해 버릴 수 있다. 해결 : 자동으로 생성되는 함수들을 private 로 선언하거나, =..

반응형