Scott Meyers가 그의 책 Effective C++에서 쓴 말이다... Do as the ints do....

워낙 유명한 말이어서 여기 저기 유명한 아저씨들이 많이 인용하고, 덧붙여 설명했지만...

그 말을 하게된 배경과 다른 아저씨들이 인용하게 된 배경을 보면...

특별하게 만들지 말고... 평이하게 만들어야 가독성 높고, 유지보수가 용이하다는

지극히 당연한 상황을 설명하기 위한 이야기다.

한 때 나에게 귀감이 되었던 말이어서 메신저 닉으로 오랜 기간 사용하기도 하였다.

또 한명의 위대한 아저씨인 Herb Sutter도 Exceptional C++에서 평이한 것의 매력에

대한 이야기를 하면서 Scott 아저씨의 저 유명한 말을 또 한번 인용한다.

약간 덧붙여서 말하고자 한 내용은 아는 것을 구현하고, 구현한 것은 모두 알아야

한다는 내용이다. 한 쪽으로만 성립되는 것이 아닌 것이다.

가끔 구현하면서 순간의 짜릿함을 느끼며, 바로 이거다 라고 생각하며 구현한

무언가를 나중에 다시 보게 되었을 때... 이게 무얼까? 라고 생각하며 건드렸다가...

다른 쪽에서 제 3의 문제로 전파되는 경우를 종종 목격한다. -_-;;

오늘도 무언가를 건드려 볼 요량으로 어찌어찌 해보다가...

undo 신공으로 원래대로 돌리는데 두어시간 버리면서...

머리카락이 삐죽서는 아찔함을 경험해보니 닉으로 좀더 사용해야 하지 않나 생각된다..-_-;;



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by nemonandes
Herb Sutter의 More Exceptional C++의 item3을 보면...

predicate가 복사되어도 상태를 일관되게 관리하기 위해서

자체적으로 제작한 스마트 포인터(CountedPtr)을 이용한 예를 볼 수 있다.

아무리 봐도 이상한 점은 아래 코드에서 빨간색으로 표시한 대입연산자에서

왜 Decrement를 호출해줘야 하는가 이다... auto_ptr 처럼 소유권이 이전되는게

아닌데... 아무리 봐도 이해가 되질 않는다...-OTL

( Herb Sutter 아저씨는 그냥 평범하게 boost::shared_ptr을 쓸 것이지... --; )

개인적으로 나중에 다시 보거나 누군가가 댓글을 달아주겠거니 하는 희망을 갖고

포스팅한다...

[CODE type="c"]
template <typename T>
class CountedPtr
{
private :
  class Impl
  {
  public :
      Impl ( T* pp ) : p ( pp ), refs ( 1 ) { }
      ~Impl ( ) { delete p; }

      T*        p;
      size_t    refs;
  };
  Impl*    impl_;
public :
  explicit CountedPtr ( T* p ) : impl_ ( new Impl ( p ) ) { }
  ~CountedPtr ( ) { Decrement ( ); }

  CountedPtr ( const CountedPtr& other ) : impl_ ( other.impl_ )
  {
      Increment ( );
  }

  CountedPtr& operator = ( const CountedPtr& other )
  {
      if ( impl_ != other.impl_ )
      {
          Decrement ( );     // 얘의 의미가 몰까???
          impl_ = other.impl_;
          Increment ( );
      }

      return *this;
  }

  T* operator -> ( ) const
  {
      return impl_->p;
  }

  T& operator * ( ) const
  {
      return *( impl_->p );
  }

private :
  void Decrement ( )
  {
      if ( --(impl_->refs) == 0 )
          delete impl_;
  }

  void Increment ( )
  {
      ++(impl_->refs);
  }
};
[/HTML][/CODE]

예가 잘못된 것인가??? 내가 잘못 생각한 것인가...
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by nemonandes


Exceptional C++ 지하철 도서 부류에 넣고 들고

다닌지 거의 두 달. 책이 잘 읽혀지지도 않고...--;

번역이 무언가 약간 평이하지 않아서

원서와 대조해서 보고... 의미를 파악하는 등...

게다가 시종일관 진지한 책이었다...-OTL

그리하야... 결국 시간이 많이 걸렸다...

일단 시리즈 물이니까..

다음 버전 More Exceptional C++ 들고 다니는데..


예전에 앞부분 좀 본 바로는 IT 서적 전문 번역가가 아닌 분이 번역을 하셔서인지..

코드가 잘 맞지 않음을 느꼈다.. 음... 이 책은 번역서만 보유하고 있는데...

출판 이후 A/S 서비스는 잘 안되고 있는 듯하고.. 결국 어둠의 경로를 통해서

찾아봐야 할 듯.. 우선 표지에 씌여 있는.."이 정도는 알아야 진정한 C++ 프로그래머"

라는 멘트...^^;; 일단 책을 펴 볼 수 밖에 없게 만든다.

책은 얇아서 들고다니기 좋은데 모든 시리즈를 번역한 출판사가 달라서 책 크기나...

디자인이 약간 신경쓰이게? 다르다.

시리즈 물인데 3권 모두 다른 분에 의해 번역되었고...

Exceptional C++은 Scott Meyers가 머릿말을 썼는데 MXC++은 Andrew Koenig가

머릿말을 썼다. 책에 대한 흥미를 유발시키는 머릿말...:)

그나저나.. 다른 요인으로 지치게 만드는 책이 아니어야 할텐데... 살짝 걱정...

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by nemonandes

link to tattertools link to Daum link to Tistory link to AllBlog link to DNSever
BLOG main image
may the force be with you................ by nemonandes
mail to nemonandes

카테고리

분류 전체보기 (225)
C落書Log (135)
S關心事Log (74)
C自動車Log (4)
C寫眞Log (12)
Statistics Graph