std::auto_ptr 에 대한 이야기이다. 이것은 표준에 있는 스마트 포인터 이기 때문에, 스마트 포인터의 대표격이다. 물론 C++ 0x 에선 shared_ptr 이 .. 대표로 갈아치우지 않을까 한다. : ) 질문 1. auto_ptr을 잘못 사용 하고 있는 코드이다. 한번 찾아 보아라. template void f( size_t n ) { auto_ptr p1( new T ); auto_ptr p2( new T[n] ); // .. 할일 있으면 더 한다. } 질문 1은 바로 답을 말하면, 배열을 담았다는 데에 있다. auto_ptr 은 배열을 담는다 해도 delete[] 를 호출해 주지 않기 때문에 문제이다. 질문 2. 이 문제를 어떻게 해결할 것이며, 어댑터 패턴이나 생성 작업의 문제점과 aut..
책 정리/More Exceptional C++ 검색 결과
이번 항목은 간단하여 바로 질문을 들어가 본다. 1. 두개의 변수를 받아서 일반적인 < 비교 연산자를 이용해서 더 큰 값을 찾아내는 간단한 max를 작성해보고 함정이 무엇인지 찾아 보라. .. 간단한 max 함수를 inline 화 시켜서 사용 하면 된다. 항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자. 함정을 피해가기 위한 조언으로는 변수의 괄호를 잊지 말고 해 줘야 할 것 식 전체에 괄호를 잊지 말고 씌워 줄 것 다중 변수 계산을 조심 할 것 이름 바꿔 치기를 조심 할것 2. 전처리 매크로로 만들 수 없는 것은? 재귀 매크로가 없다는 것 메크로 주소가 없다는 것 매크로는 디버깅해서 쫒아 갈수 없다는 것 C++ 표준 16.3/8의 주석 7을 인용해 본다면 다음과 같이 ..
Effective C++ 3판에서 봤던 내용이 기억 나는데, 전처리 매크로(#define)가 위험하기 때문에 C++ 스타일을 사용하자고 제안했던 것을 볼 수 있다. 일전에 동기인 강일이형이 보여 주었던 전처리 매크로(#define)의 문제점을 통해서 확신이 들었다. 이번 항목은 이런 전처리 매크로를 아직 쓰는 이유와 어떻게 대처 할 수 있는지에 대해서 이야기 하고자 한다. 1. 헤더 꼬임 방지하기 즉 헤더가 꼬이는 것을 방지하는 것을 위해서 사용 한다. #ifndef __TEST_HPP__ #define __TEST_HPP__ /* 이 내부는 __TEST_HPP__ 가 없을 때만 읽혀진다. */ #endif //__TEST_HPP__ 2. 전처리 기능 접근하기 좀 편하게 진단 코드를 사용 할 수 있기 위..
이번 항목의 네스티드라고 해서 무슨 말이지? 하고 잠깐 생각 했었다. 인터넷에서 검색을 해보니, "함수가 보이는 범위를 특정 함수안에서만 보이는 함수" 를 nested function 이라고 한다. 좀 생소한 느낌이 들었지만, 이런 기능이 C++ 에서도 있다는 것을 알게 되었다. 바로 클래스 내에 있는 클래스, 영어권에선 이런 클래스를 nested class 라고 한다. 우리나라에선 지역 클래스라고 하는거 같지만 이 책을 읽고 전혀 다른 의미인 것을 알게 되었다. 그렇다면 이번 항목의 주요한 질문은 무엇인가? 1. nested class는 무엇이며, 어떤 이유에서 유용하게 쓰일 수 있나? 우선 nested class 를 코드로 보여 준다면 아래와 같다. // 항목 33 : nested function 의..
자기 자신을 가리키는 포인터를 리턴하는 함수를 작성할 수 있는가? 그렇다면 그런 함수를 작성 하는 이유는 무엇인가? .. 질문은 이렇게 시작한다. 나에게 큰 시련을 안겨줄것에 대한 운명은 전혀 예상치 못했다. 이렇게 막히게 될 줄이야.. 질문을 시작 하면 1. 함수에 대한 포인터는 무엇인가? 어떻게 사용 될 수 있을까? 개인적으로 생각 하자면, 인공지능에 사용 되면 무척 편리하다는 생각을 했었다. 각 상태에 맞게 함수를 붙여 주면서 그 객체의 인공지능이 상태에 맞게 스위칭되는 것을 외부에서 관리할 수 있어, 인공지능 매니저가 인공지능 함수를 관리해서 쓴다면 좋을거 같다. 다른 대안으로는 STL 컨테이너 검색 및 변경 작업에 쓰면 좋을 듯 싶지만, 이건 함수 오브젝트가 있는 이상 ... 그다지 유용하지 않..
저번 항목에 연이은 네임스페이스 이야기이다. 역시 알아두면 무척이나 유용하기에, 재미있게 읽을 수 있었다. 언제나 그렇듯 네임스페이스를 알고 있다면, 어떻게 사용하는게 좋을까? 에 대한 논의이다. 저번 항목에서 using 키워드 하나로 사용하기 꺼려진다면, 당신은 루키, 떠오르는 샛별!, 그 느낌 그대로 계속 정진해야겠다. .. 알면 알수록 .. 점점 키워드라든지 어떤 편한것에 대해서 점점 아예 사용하기 꺼려진다. 타이핑 몇번(using 키워드의 타이핑)만 해서 편해지는 것 보다, 타이핑 몇번(std:: 로 직접 호출)하는것이 더 좋겠다. 이번 항목은 이런 꺼려지는 내용들에 대한 마지막 정리이다. 네임스페이스로 마이그레이션은 책을 통해 보면 금방 이해하니 예제코드는 제외하고.. 요령만 정리하자면 1. u..
최근댓글