항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. 이유 1. 존재하지 않는 객체를 레퍼런스로 반환 되어, 런타임 중 오류가 일어 날수 있다. - 함수에서 생성한 객체를 반환하는 경우 주의점 1. 레퍼런스를 반환할지 객체를 복사하여 리턴할지는 고민된다면, 올바르게 동작하는것으로 리턴 해라. 2. 컴파일러 제공 회사가 가능한 비용이 적게 드는 방법을 발견하도록 맡겨 둘것 코드 최적화(RVO)를 컴파일러가 알아서 해주는 부분을 말하는것 같다 개인적인 생각 1. .. int 형 이하의 객체는 모두 값에 의한 전달을 하는게 속편하다. 2. 여전히 해결방법 1번을 잘 생각해 봐야 할것이다.
책 정리/Effective C++ 2판 검색 결과
항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다. 이유 2008/06/06 23:27 수정 1. 효율성이 매우 떨어 진다. 2. 상속 받은 객체가 부모객체 메소드에 들어갈 경우, 값이 짤려버린다. 1. 파생 클래스의 객체를 값에 의한 복사를 이루어질 경우, 그 비용을 많이 지불하기 때문이다. 2. 또한 객체 복사는 슬라이싱 문제(slicing problem)가 파생 객체의 복사체에 일어 날수 있기 때문이다. 해결 방법 1. 레퍼런스로 전달 한다. 주의 사항 - 2008/06/06 23:27 수정 1. 레퍼런스를 사용할때는 모호성이 없는것을 보장해야만 한다. 2. int형 이하의 데이터이고, 복사본만 쓰면 되는 경우 call by value가 더 빠르고 더 효율적이다. 1. 레퍼런스를 사..
항목 21. 가능한 const를 이용한다. 이유 1. 여러 상황속에서 내가 정의한 데이터가 아무렇게나 변경 될수 있다. - 포인터, 레퍼런스로써 가리킨 데이터가 private인경우에도 변경되는 경우와 마찬가지다. 2. operator 의 반환값이 const 가 아닐경우 a * b = c 와 같은 경우 무슨일은 한거같은 느낌만 들기 때문이다.(실험해 보면 재미잇다) 해결 방법 1. const 키워드를 넣을수 있는 곳에는 주저말고 넣자. 2. 포인터로 값을 전달하게 될때는 이중 const로 묶어 놓자. 참조 사항 1. 내부 함수가 레퍼런스로 값을 반환해줄경우 private에 있는것도 접근이 가능해진다. 2. 1번의 사항은 포인터도 마찬가지다. 그러므로 이럴때 const를 사용 하면 좋다. 더 좋은것은 설계를..
항목 20. 데이터 멤버를 공용 인터페이스에 포함시키지 않는다. 이유 1. 가독성이 매우 떨어진다. - 어떤것은 public 이고 어떤것은 private면 무엇이 public인지 private인지 알고 있어야 한다. 2. 정보은닉이 되지 않아 디버깅 능력이 떨어지게 된다. 해결 방법 1. 데이터는 모두 private로 넣어 둔다. 2. Get / Set 을 이용한다. 개인적인 생각 #define 문구를 만들어 멤버 데이터에 그 표시를 해둔다. #define NOACCESS #define READ #define WRITE #define ONLY class CBabo { public: private: READ ONLY int a; // ㅋㅋㅋ READ WRITE int b; WRITE ONLY int c; ..
19. 멤버 함수, 비멤버 함수 및 프렌드를 구별한다. # 멤버함수와 비멤버 함수의 차이점 멤버 함수는 가상 함수일 수 있다. 비멤버 함수는 가상 함수가 아니다! 이유 1. 클래스의 객체가 입출력 및 사칙연산시 자연스러운 호출 되지 않아, 가독성 및 인터페이스가 영 꽝이 되기 때문이다. 예) 3 * Class Object 와 Class Object * 3 의 차이이다. 해결 방법 1. 전역 변수로 operator를 만들어 사용 한다. 이때 관리를 위해 한 클래스 해더파일에 정의하는 편이 좋다. 2. 멤버 함수로써 처리가 가능하다면 멤버 함수로만 사용하고, friend가 필요 하다면, friend로 선언해야 한다. 3. 각각의 특징과 쓰임을 파악하면 된다. 주의점 코드를 보고 이해하자. #include u..
항목 18. 최소한의 완전한 클래스 인터페이스를 구축한다. 클래스 클라이언트 인터페이스란? 클래스를 이용하는 프로그래머가 접근할 수 있는 인터페이스다 (public) 이유 1. 인터페이스 내에 함수들이 많아짐에 따라 미래의 클라이언트들은 이해하기 어려워진다. 2. 적은 함수들을 가진 클래스보다 많은 함수들을 가진 클래스를 관리 또는 수정하기 더 어렵다. 3. 길다란 클래스 정의는 길다란 헤더파일을 초래하여, 컴파일 시간에 상당한 불이익을 가져올수 있다. 해결 방법 1. 한번만 Set 하면 되는 경우 생성자를 통하여 값을 넣어라. 2. operator= 으로 한번만 Set 하면 되는 멤버 변수의 값이 변경된다면, Get 함수 사용시 const 로써 불려지게 만들어라. (이건 매우 속편하다. 이런것까지 고려..
최근댓글