부재 : 안전성인가? 속도인가? 햄릿에 고뇌에 빠져보자. 이유 1. 예외를 안쓰면 쓴것에 비해 속도도 빠르고 크기도 작다. 2. try 블록만으로 5~10% 실행속도가 저하된다. 3. 예외 지정 기능 역시 2번과 비슷한 저하가 일어 난다. 구형 방법 : 없음 주의 점 1. try 블록과 예외지정은 꼭 필요할 부분에서만 사용 한다. 2. 예외를 발생시키는 일도 진짜 예외적인 상황이라고 판단될때만 정의한다. 3. 예외 발생은 극히 드믈기 때문에, 예외 처리 비용에 대해서는 정확히 예측하기 힘들다. 4. 예외 처리에 비용이 든다는것을 알고, 경계를 늦추지 말면서 사용 해야 한다.
전체 글 검색 결과
부재 : 예외지정을 알고나서 쓰자. 이유 1. 예외 지정 리스트에 없는 예외를 발생시킬 경우, 런타임 에러와 unexpected 함수 발생시켜 프로그램이 칼같이 종료될수 있음 구현방법 1. 템플릿에는 예외 지정을 두지 않는다 2. 예외 지정이 안 된 함수를 호출할 가능성을 가진 함수에는 예외 지정을 두지 않는다. 3. unexpected 를 다른 함수로 교체 한다.(set_unexpected()함수를 이용해서 바꿀수 있음) 주의점 1. 사용자는 예외지정의 일치성을 어기기가 쉽기 때문에, 뜨거운 가슴으로 부터 예외 지정을 해야 하는지 생각해 보고 써야 한다.
이유 1. 예외처리 중 객체의 유효범위(scope)를 벗어날수 있기 때문에 포인터로는 받을수 없다(있지만 복잡함) 2. 1번의 경우때문에 값을 복사 해서 넘기는 방법이 편하지만 효율적인 면에서 두번의 복사가 부담스러움 3. 2번의 경우는 슬라이스 문제(클래스 계통에 따른 정적복사는 값이 짤려 나갈 경우가 있음)가 도사리고 있음 구현 방법 1. try 에선 값으로 보내고 catch 에선 참조자(레퍼런스)로 받아 주면 된다. 코드 try { // Validation_error는 exception으로부터 파생 된 객체이다. 그러므로 임시 객체 생성된것을 전달함 if(유효성 검사 실패했을 경우) throw Validation_error(); 된것임 } catch (exception &ex) { // 처리 하고~..
: 인자값은 들어가는 값을 말하는것이고 매개변수는 들어가는 값을 받아주는 변수를 말한다. 둘다 비슷한 말이지만 차이가 있으니 꼭 짚고 넘어가면, 이해하는데 도움이 된다. 개념정리 1. 예외의 발생과 처리에 대해서 알고 있어야 한다. (발생 지점과 처리 지점이 다르다는 뜻) 이유. 1. 함수 호출방식과 예외처리 호출방식은 다르다, 함수 호출이 끝나면 호출된 지점으로 옮겨지지만, 예외처리는 예외 처리가 끝나면 그 다음부터 수행한다. 2. 예외 전달은 인자값을 무조건 1번 복사하여, 매개변수에 전달한다. (매개변수에 전달될때 또 한번 복사가 이루어 질 수 있다.) 3. 함수는 매개변수로(함수 오버로딩시) 함수를 찾아 호출하지만, 예외처리는 코드의 순서로 예외처리를 찾아 호출한다. 4. 인자값이 형변환되어 매개..
가끔 책을 읽다 보면, 몇가지 주의해야 하는 점을 보곤 한다. 그 중 신경쓰이는 것중 하나가 "단어의 의미" 이다. 원래가 한국책인 경우에는 상관이 없지만, 외국의 책을 번역한 책의 경우, 그 단어와 개념이 맞지 않는 경우가 있어, 이해하는데 곤혹을 치루곤 한다. 그래서 내 자신과 맞는 단어를 별도로 생각해서 쓰곤 하는데, 이게 또 다른 사람과 이야기 할때, 역시 곤혹을 치루곤 한다. 이때 More Effective C++ 을 보는 중, 벅역하신 곽용재씨께서 "클래스의 관계는 계층적 구조가 아닌 계통적 구조" 라는 말과 함께, 류광씨의 주장에 동감한다고 한 부분이 있었다. 해당 싸이트에 가서 해당 글을 읽으니 역시 동감한다. 링크를 표시해 두는 센스 링크 : http://occamsrazr.net/tt/..
부제 : 예외처리의 막장인생 소멸자 개념정리 : 소멸자가 호출되는 경우 두가지 1. 객체가 통상적인 상태에서 소멸 되는 경우(유효범위를 벗어 났을 경우, delete 됬을 경우) 2. 예외 처리 매커니즘에 의해 객체가 소멸 되는 경우 : 예외처리가 진행중일때 예외가 발생 된다면 1. terminate 함수 호출 : terminate 함수의 역활 1. 프로그램을 종료시킴 이유 1. 예외 전파의 일부분으로서 진행되는 스택 되감기 동작 중에 terminate가 호출되는것을 막기 위해 2. 소멸자의 동작을 완전히 끝내도록 하기 위해서(소멸자에서 예외가 발생하면 소멸자는 호출되지 않은 상태이다!) 구현 방법 1. 소멸자 처리 중 예외가 발생하면, 소멸자에서 그 예외를 처리해 주면 된다. 예) delete::~te..
최근댓글