항목 14에서 실제로 쓸 때, 실제 객체를 만드므로써, 복사 자체를 지연 시킴을 보았을 것이다. 이번 항목에선 operator[] 를 이용해서 사용 되어 질 경우에 생각해야 할 "거리"를 준다. 다음 코드를 보자. namespace Optimized { class StringBuf { private: // 복사 방지 StringBuf( const StringBuf& ); StringBuf& operator=( const StringBuf& ); public: StringBuf(); ~StringBuf(); void Reserve( size_t n ); public: char *buf_;// 버퍼 size_t len_;// 버퍼의 길이 size_t used_;// 실제로 사용된 char의 수 unsigne..
More Exceptional C++ 검색 결과
항목 13에서 보여주었던 String 클래스에는 큰 문제(..)는 없으나, 문자열 특성상 복사만 하고 삭제 되는 경우가 있기 때문에, 불필요한 복사가 이루어 진다고 볼 수 있다. 여기서 생각해 볼 만한 사항은, 어떻게 하면, 문자열의 내부가 변경 되어 질 경우에만, 실제 복사가 이루어 지게 하고, 아닐 경우에는 문자열만 공유 되게 할 수 있는가? 이다. 다음 코드를 보자! namespace Optimized { class StringBuf { public: StringBuf();// 빈 채로 시작 ~StringBuf();// 버퍼 지우기 void Reserve( size_t n );// len >= n인지 확인 char *buf_;// 버퍼 size_t len_;// 버퍼의 길이 size_t used_;..
이번 항목은 최적화 시리즈 중에서 복사 미루기를 통하여, 성능을 향상 시키는 방법을 이야기 하고 있다. 그 예제로 허브셔터는 문자열 클래스를 만들어 보기로 한다. 아래 코드를 보자. namespace Original { class String { public: String();// 빈 채로 시작 ~String();// 버퍼 지우기 String( const String& );// 완전한 복사본 받기 void Append( char );// 문자 하나 붙이기 // ... operator= () 등 생략 ... private: char *buf_;// 할당된 버퍼 size_t len_;// 버퍼의 길이 size_t used_;// 실제로 사용된 char의 수 }; } 자, 이 코드에서 Original::Str..
이번 항목에선 inline을 언제 사용 해야 되는지에 대한 논쟁이다. 대부분 inline을 과용 하고 있어, 문제가 될 소지가 많이 있다고 허브셔터는 지적한다. 허브 셔터는 3개의 질문을 통해서 한번 생각해 보라고 한다. 1. inline이 하는 일은? 함수를 inline으로 만들면 컴파일러는 함수가 쓰이는 곳마다 함수의 코드를 직접 복사해서 붙인다. 이렇게 되므로써, 컴파일러는 함수 호출 코드를 만들지 않고 함수를 마음껏 실행 할 수 있다. 2. inline 함수를 만들면 효율성이 높아지나? 꼭 그런 것만은 아니다. 만약 여기서 "무엇을 최적화 하려 하는가?"를 질문하지 않았다면, 바로 함정에 빠진것이라고 한다. 왜냐하면 inline의 효율은 함수 호출 비용만 줄여 줄 수 있을 뿐이기 때문이다. a )..
public 상속의 막강한 힘은 해본 사람만이 안다. DX 리소스 매니저를 만들 었을 때, 리소스 매니저의 리소스를 상속한 버텍스와 텍스쳐 등을 다형성으로 제어 하고, 사용 할 때, public 상속은 정말 깔끔함을 선사해 준다. 이번 항목을 이런 다형성을 제어하는데 초점을 맞춘다. 예제 코드를 보자. #include class Base { public: virtual void VirFunc() const { std::cout
혹시 순수 가상 함수를 사용 해본적이 있는가? 그렇다면 어떤 함수를 순수 가상함수로 만들어서 사용 했는가? 이 번 항목에선 이런 질문들을 정리하기 위한 항목이라 봐도 좋을 듯 싶다. 질문 1. 순수 가상 함수는 무엇인가? 예를 들어라. class pure_virtual_function_class { public: virtual ~pure_virtual_function_class() = 0; }; 질문 2. 순수 가상 함수를 선언하고 정의를 작성하는 이유는? 생각해 낼 수 있는 모든 이유나 상황을 제시하라. ① 순수 가상 소멸자를 위해서 알디 시피 순수 가상 소멸자를 만들어야만 할 경우, 그 소멸자의 본체도 정의해 두어야 한다. 왜냐하면 가상 소멸자의 호출 매카니즘이 파생 소멸자에서 기본 클래스 소멸자를 ..
최근댓글