예외 처리 개념 위키 백과 : http://ko.wikipedia.org/wiki/%EC%98%88%EC%99%B8_%EC%B2%98%EB%A6%AC 이번 예외처리는 중요한부분을 8 챕터로 More Effecitve C++ 에서 설명한다. 항목 9 : 리소스 누수를 피하는 방법의 정공은 소멸자이다. 항목 10 : 생성자에서는 리소스 누수가 일어나지 앟게 하자. 항목 11 : 소멸자에서는 예외가 탈출하지 못하게 하자. 항목 12 : 예외 발생이 매개변수 전달 혹은 가상 함수 호출과 어떻게 다른지를 이해 하자 항목 13 : 발생한 예외는 참조자를 받아내자 항목 14 : 예외 지정 기능은 내철하게 사용하자. 항목 15 : 예외 처리에 드는 비용에 대해 정확히 파악하자. .. 이렇게 설명 되어 진다. 인터넷에서..
More Effective C++ 검색 결과
부재 : new와 operator new 의 차이점에 대해서 숙지해라. 이유 1. operator new 와 new 는 엄연히 차이를 보이기 때문이다. 해결방법 .. 각 차이점을 이해 한다. new 연산자는 1. 오버로딩이 안된다. 2. 내부적으로 operator new를 호출한다. 3. 생성자를 호출한다. 4. 객체형 포인터를 반환한다. operator new 는 1. 메모리 할당을 받는다. 2. void *형을 반환한다. delete 역시 마찬가지다. operator new 와 operator delete 는 C++ 판 malloc 과 free 함수 이다. 배열을 new 할때의 차이점 1. new는 똑같지만 내부적으로 operator new[] 를 호출 한다. 2. 그리고 각각 new에 의해서 생성자..
개념 정리 1. 단축 평가 의미 구조 : 왼쪽평가후 오른쪽 평가 하는데, 왼쪽 평가가 거짓이면 오른쪽평가는 하지 않는다. 2. 함수 호출 의미 구조 : 매개변수는 다 평가 해야함 (단축 평가자체를 할수 없음) 두개의 개념을 알고 있어야 한다. 이유 1. && ||를 오버로딩 하면, 단축평가 메카니즘을 사용 할수 없어 효율이 떨어짐 2. , 오버로딩하며느 고유의 기능을 사용 할수 없게 됨 해결 방법 1. 원래 연산자처럼 동작하게 만들 수 없으므로, 오버로딩 하지말라. 개인적인 생각 1. 단축평가 메카니즘과 , 연산의 경우, 프로그래머가 어떻게 손써볼 방법이 없으므로, 고유의 동작 방식을 구현할수 없다고 이해 된다. 2. 단축 평가의 이점 단축 평가는 평가 도중 조건에 만족하지 않는다면 그 뒤의 평가를 전부..
부재 : 전위 연산자와 후위연산자의 특징을 이해하고, 전위 후위연산자 오버로딩 시 원칙을 지켜라. 이유 1. 알맞은 클래스 설계를 위해서 (사실 이 말 밖에 없다..) 해결방법 1. 전위 연산자와 후위연산자의 특징을 이해 해라.(밑의 코드를 이해 하면 .. 뭐 다 아는거다.) 2. 전위/후위 연산자를 오버로딩 할땐, 전위 연산자로 후위 연산자를 표현하는 원칙을 지킨다. (왜냐하면, 일반적인 규칙이기 때문이다) 3. 아리송할땐 객체가 int와 동일한 연산을 할수 있도록 정의해 준다. 코드 // 전위 연산자 작동 원리 : 0개의 임시객체를 만드는것을 알수 있다. template _T& operator++() { *this += 1; // 임시객체 생성 안함, 바로 연산처리함 return *this; // 레..
항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자. 개념정리 매개변수(parameter)는 함수를 선언할 때 괄호 안에 명시하는 데이터 인자(argument)는 함수를 호출할 때 넘기는 데이터 사용자 정의 타입변환 함수는 operator char () 같은 함수를 말한다.(쉽게 생각해 형변환 연산자 오버로딩이다) 이유 1. 프로그래머의 의도와 달리 함수가 잘못 호출될 수 있다. 예)std::cout
항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자. 개념 정리 1. 클래스 생성시 기본적으로 생성되는 함수들이 무엇이 있는지 알아야 한다. operator 까지! 2. 1번의 사항과 더블어 각각의 기본적인 상태도 알아야 한다. 이유 1. 기본 생성자가 없을 경우, 배열의 생성이나 new 연산을 사용 할수 없다. 2. 기본 생성자가 없을 경우, 템플릿 기반의 콘테이너를 사용 할수 없다. 해결방법 1. 쓸데없이 생성자 정의는 하지 마라. 2. 만약 기본 생성자가 없다면, 자신에 맞는 기본생성자를 만들어 주라. 주의점 1. 이 이야기는 기본 생성자가 다른 용도로 쓰일 때, 본래 목적의 기본생성자가 있어야 한다. 2. 배열 선언시나 new를 객체 배열들이거나 기본생성자 ()를 사용 한다는 점을 알고 있어야 ..
최근댓글