예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! 예외 안전성이란 무슨 말인가? "예외적 상황에 대해서 안전한가?"에 대한 말이다. 왜 확보해야 하는가? 코딩중에 컴파일타임에 에러를 다 찾아내면 좋겠지만, 컴파일 타임에 찾지 못하는 에러들은 정말 찾기가 힘들어진다. 그렇기 때문에, 예외적 상황에 대해서 대처를 해야지만 디버깅이 용이해지고, 프로그램 자체도 더 견고해지기 때문에 확보해야 한다. 함수들의 예외 안전성은 어떻게 동작해야 하는가? 1. 자원이 절대 새도록 만들지 않는다. 2. 자료구조가 더렵혀지는 것을 허용하지 않는다. 그렇다면, 예외 안전성을 갖춘 표준 보장은 무엇인가? 1. 기본적인 보장(basic guarantee) : 예외 발생에 있어, 자원 누수를 시키지 않겠다는 보장 2. 강력한 ..
내부에서 사용하는 객체에 대한 ‘핸들’을 반환하는 코드는 되도록 피하자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //점을 나타내는 클래스 class Point { public: void setX(int newVal); void setY(int newVal); }; //Rectangle에 쓰기 위한 점 데이터 struct RectData { Point ulhc; //ulhc = “좌측 상단(upper left – hand corner)” Point lrhc; //lrhc = “우측 하단(lower right – hand corner)” }; class Rectangle { private: std::tr1::shared_ptrpData; //tr1::shared_ptr..
캐스팅은 절약, 또 절약! 잊지 말자. 책에 있는 예제들은 소스 코드가 이해하기 힘든 관계로 퍼오거나 직접 만들었습니다. 하지만 책에 있는 예제들 전부 빼놓지 않고 넣어 놨습니다 우선 쉬운 예로 시작하다가 책의 예제로 이어 가겠습니다. 책에 있는 내용을 추가 한거라고 생각 하시면 됩니다. 복습 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81..
변수정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 변수 정의를 늦출수 있게 된것은 C++의 어디에서건 변수를 선언 할수 있게 만들어 줌으로써 생겨난 방법일것이다. 가장 큰 이유는 변수의 생성 대입 초기화 라는 작업이 일어날 필요가 없게 될 경우가 생기기 때문이다. 예를 들어서, 아주 큰 객체를 생성하여 대입하고 하고, 특정 함수를 작업하고, 다시 선언된 큰 객체를 사용하고 날려 버리는 작업이 있다고 했을때, 특정 함수에서 오류가 나서 이 객체를 쓰지도 못하게 되었다고 한다면 이해가 쉽게 갈것이다 예제 1 1 2 3 4 5 6 7 8 9 10 11 12 void main() { string encrypted; if(password.lengh() 결론 변수 정의는 늦출 수 있을 때까지 늦추자.
예외를 던지지 않는 SWAP에 대한 지원도 생각해 보자 타이틀 입력부분C++에서 SWAP 이란 두 객체의 값을 ‘맞바꾸기’한다는 것을 말함. 기존의 SWAP의 동작을 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 namespace { void swap(int a,int b) { int temp; Temp = a; a = b; b = temp; } } cs 어김없이 동작을 하게 되어있습니다. 하지만 예외의 swap의 동작을 요구하는 swap도 있습니다. 예제1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class AA { public: private: int a,b,c; std::vectorv; }; c..
타입변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 유리수가 선 객체일경우 operator를 사용하면 에러가 뜬다. 문제점 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 class Rational { public: Rational(int num = 0, int num1 = 1); //explicit붙이지 않는 이유는 int에서 Rational로의 암시적 변환을 허용하기위해… const Rational operator*(const Rational& rhs ) const; }; void main() { Rational Eighth(1, 8); Rational Ha..
- Total
- Today
- Yesterday
- C++
- Linux
- 암호화
- C
- C#.NET
- CMake
- script
- C# 고급 기술
- Build
- 울릉도
- DLL
- 성산블루버블
- 현포다이브
- C#
- 블루버블다이빙팀
- effective
- OpenSource
- 외돌개
- 블루버블다이브팀
- 제주도
- PowerShell
- Windows
- 서귀포블루버블
- Effective c++
- 블루버블
- 네트워크 정보
- 스쿠버다이빙
- 패턴
- 스쿠버 다이빙
- 서귀포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |