예외 안전성이란 무슨 말인가? "예외적 상황에 대해서 안전한가?"에 대한 말이다. 왜 확보해야 하는가? .. 코딩중에 컴파일타임에 에러를 다 찾아내면 좋겠지만, 컴파일 타임에 찾지 못하는 에러들은 정말 찾기가 힘들어진다. 그렇기 때문에, 예외적 상황에 대해서 대처를 해야지만 디버깅이 용이해지고, 프로그램 자체도 더 견고해지기 때문에 확보해야 한다. 함수들의 예외 안전성은 어떻게 동작해야 하는가? 1. 자원이 절대 새도록 만들지 않는다. 2. 자료구조가 더렵혀지는 것을 허용하지 않는다.(.. 이 말은 자료가 자료가 아닌게 되는 상황을 말한다.) 그렇다면, 예외 안전성을 갖춘 표준 보장은 무엇인가? 1. 기본적인 보장(basic guarantee) : 예외 발생에 있어, 자원 누수를 시키지 않겠다는 보장 2..
EC++ 검색 결과
이해하기 전에 알아야 하는 핸들이란? 다른 객체에 손을 댈 수 있게 하는 매개자를 지칭하며, 참조자등의 성격을 띄우고 있다.(외부 참조) 그렇다면 왜 '핸들'을 반환하는 코드를 피하는것일까? 쉽게 말해서 클래스 내부 멤버 변수는 private 으로 해야 한다고 배웠을 것이다. 그런데 멤버 변수에 대한 포인터나 레퍼런스를 반환하게 된다면, 그것이 const 로 한다해도, 외부에서 아주 손쉽게 변환을 가할수 있는 상태가 된다. 이 상태는 바로 캡슐화가 깨진 상태가 된다. 캡슐화가 왜 중요한지는 다들 알것이므로 생략한다. 저자 역시, 핸들을 반환해야 하는 어쩔수 없는 경우에만 핸들을 반환한다고 말한다. 어찌 되었던, 클래스 private에 넣는것을 간과하여, 코딩을 하면 안된다는 것을 알려 준다. 이것만은 잊..
C++에서 캐스팅을 왜 절약해야 하는지 알아가기 전에 우선 알아야 할것은 C++ 스타일식 캐스팅 변환을 왜 해야 하는지 부터 알아야 한다. 기존의 C스타일의 캐스팅은 (T)표현식, T(표현식), 이렇게 사용 했었지만, 이것을 C++에선 '구형 스타일 캐스트' 라고 불린다. C++에서는 새로운 캐스팅 변환은, const_cast(표현식), dynamic_cast(표현식), reinterpret_cast(표현식), static_cast(표현식) 등이 있다. 각각의 중요한점만 말한다면, const_cast 는 객체에 걸려있는 상수성을 없애는데 사용 한다. dynamic_cast 는 상속 계통으로의 캐스팅을 '확인'해 가면서 캐스팅을 해주며, 이것으로 인항 많은 비용을 지불하는 캐스팅 연산자이다. reinter..
지연평가와 선행평가에 대해서 어느정도 감이 오는 사람이라면, 아주 손쉽게 이해되는 장이다. 변수 정의를 늦출수 있게 된것은 C++의 어디에서건 변수를 선언 할수 있게 만들어 줌으로써 생겨난 방법일것이다. 왜 늦출 수 있는 데까지 늦추어야 하는가? 가장 큰 이유는 변수의 생성 대입 초기화 라는 작업이, 일어날 필요가 없게 될 경우가 생기기 때문이다. 예를 들어서, 아주 큰 객체를 생성하여 대입하고 하고, 특정 함수를 작업하고, 다시 선언된 큰 객체를 사용하고 날려 버리는 작업이 있다고 했을때, 특정 함수에서 .. 오류가 나서, 이 이 객체를 쓰지도 못하게 되었다고 친다면, ... 이해가 쉽게 갈것이다. { string encrypted; if(password.lengh() < MinimumPasswordL..
swap 함수는 무엇일까? .. 뭐 다들 알겠고, 중요한건 이 함수를 이용하여, "교체" 를 할수 있다는것이다. 왜 이 함수가 중요한것인가? STL에 이 함수가 포함된 이래, 예외 안전성 프로그래밍에선 없어선 안 될 감초 역활로써, 자기 대입 현상의 가능성에 대처하기 위한 대표적인 매커니즘으로서 널리 사랑받아 왔다다고 저자는 설명한다; 이쁘면 얼굴값 한다고, 이 swap 함수에도 말들이 많다. 그것은 바로 효율 때문이다. 기본적으로 복사하는데에 대한 비용은 지불해야 겠지만, 지불하지 않아도 되는 경우가 있기 때문인데, 그것이 바로 다른 타입의 실제 데이터를 가리키는 포인터가 주성분인 타입의 객체(pimpl(pointer to implementation))의 swap 이다! 어떻게 하면, 이런 객체 전용의..
이게 무슨 말인가? 타입 변환이 되는 경우를 생각해 보면 1. 함수의 매개변수에 넣는 인자가 암시적으로 타입 변환되는 경우 2. 기본형 변수 중 서로 다른 형을 같이 연산하고자 할때 그런데 이게 모든 매개변수에 대해 적용되어야 한다면?? 여기서 모든 매개변수란 함수의 인자가 매개변수로 넘어갈때 모든 매개변수에 대해 타입 변환이 일어나게 할려면 이라는 뜻 같은데, 실제 코딩에선 많이 필요로 하지 않았지만, 책을 보면, 유리수 연산을 그 예로 들고 있다. 뭐, 이건 사용자가 어떻게 변하는지 안다면 다른 형에 대해서도 쓸수 을듯(.. 이것을 모르면, 암시적 타입 변환의 예 를 찾아 보는게 좋겠다) 비멤버 함수로 선언해라? 아... 여기서 눈치 챈 사람도 많겠지만, 풀어 버린다면, 멤버 함수로 넣게 되면, 자기..
최근댓글