항목 27. 의도하지 않은 내부 생성 맴버 함수의 이용을 명시적으로 막는다. 여기서 내부 생성 멤버 함수란? 1. 생성자 2. 소멸자 3. operator= 이유 1. 메모리 릭발생 위험이 있다. (반대로 메모리 릭의 반대 경우가 생길수도 있다. 없는 메모리를 delete) 2. 기본자료형과 같은 연산을 할수 없게 된다. 2008/05/31 14:19 수정 2. 제목 그대로, 의도하지 않은 동자을 일으킬수 있다. 해결방법 1. 재정의 해 준다. 2. 이용자체를 막는다. 덧붙여 해결방법 2의 예 1. operator =와 기본 private로 선언한다. 2008/05/31 14:19 수정 1. 복사생성자와 operator= 를 재정의해주거나, private로 옮겨 정상작동하거나 동작자체를 막는다 2. 함수..
Effective C++ 검색 결과
우선 잠재적 모호성이란? #include class A { public: A(const B&); }; class B { public: operator A() const; }; int main() { void f(const A&); B b; f(b); // B클래스의 operator A() 가 호출될까? // A클래스의 생성자 A() 가 호출될까? } 이런 경우를 잠재적 모호성이라 한다. 이유. 1. 컴파일 타임 중 예상치도 않은 오류가 날수 있다. 2. 라이브러리 파일의 이식성이 엄청나게 떨어진다. 해결방법 1. 네임스페이스를 사용한다.( 이 방법은 가독성을 떨어 뜨릴수 있다...) 2. 항상 디버깅이 가능한 코딩 습관을 길러야 한다; 3. 설계를 잘 하는 방법밖에 없다. 개인적인 생각 1. 이 이야기에..
우선 수치형 타입 이란? 기본자료형인 char long int float double 을 말한다. 포인터형 타입이란? char* long * .. 등등 이유 1. 오버로딩 시 그 모호성이 생길 가능성이 충분하다. (여기서 모호성은 ... VC2005 표기된 말을 그대로 인용한것으로 개인적 생각에 써 두겠다) 2. NULL 포인터와 수치형 타입의 0에 대해서 .. 매우 불확실하다. (사람의 눈으로.. 사실 0은 int형 으로 파악되고 FLASE 로 파악된다. 그것이 NULL 포인터라 할지라도) 해결 방법 1. 0이런 무엇인가? 란 답을 가지고 있어야 한다. 2. 수치오버로딩 시 오버로딩이 되는 매개변수의 변화에 대해서 생각해 두어야 한다. 3. 포인터형일 때는 다음과 같은 임시객체를 만들어 사용 해라. c..
우선 함수 오버로딩이란? 1. 똑같은 함수이름이 두개 있다. 2. 1번의 상황에서 두 함수의 매개변수가 다르다. 3. 각각 작동이 된다. 이때 이 함수를 함수 오버로딩되었다. 라고 말한다. 디폴트 인자 값이란? 1. 매개변수에 operator = 과 목적데이터를 넣는다. 예) int f(int a = 1); 이때 1은 디폴트 인자값이다. 항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다. 이유 1. C++ 특유의 함수 오버로딩과 디폴트매개변수 사이에 모호성이 발생될 수 잇다. - 이 모호성 때문에 컴파일 타임에 에러가 발생한다. (컴파일러 찾아주는 오류는 너무 반갑고 기분좋다.) 2. 가독성이 떨어 진다.... 해결방법 1. 자신에게 자문해 본다. - 디폴트로 이용할 값이 있는가? - ..
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. 이유 1. 존재하지 않는 객체를 레퍼런스로 반환 되어, 런타임 중 오류가 일어 날수 있다. - 함수에서 생성한 객체를 반환하는 경우 주의점 1. 레퍼런스를 반환할지 객체를 복사하여 리턴할지는 고민된다면, 올바르게 동작하는것으로 리턴 해라. 2. 컴파일러 제공 회사가 가능한 비용이 적게 드는 방법을 발견하도록 맡겨 둘것 코드 최적화(RVO)를 컴파일러가 알아서 해주는 부분을 말하는것 같다 개인적인 생각 1. .. int 형 이하의 객체는 모두 값에 의한 전달을 하는게 속편하다. 2. 여전히 해결방법 1번을 잘 생각해 봐야 할것이다.
항목 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. 레퍼런스를 사..
최근댓글