E D R , A S I H C RSS

BackLinks search for "RCPtr"

BackLinks of RCPtr


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Techniques2of3
         스마트 포인터에 대한 설명은 너무 방대하다. 하지만 여기 RCObject를 가리킬 스마트 포인터가 가지고 있을 능력은 멤버 선택(->), 역참조(deferencing, *) 연산자 정도만 있으면 충분하다. 물론 복사나, 생성은 기본이고 말이다. 참조 세기를 위한 스마트 포인터 템플릿을 RCPtr이라고 명명하고, 기본적인 뼈대를 다음과 같이 구성한다.
         class RCPtr {
          RCPtr(T* realPtr = 0);
          RCPtr(const RCPtr& rhs);
          ~RCPtr();
          RCPtr& operator=(const RCPtr& rhs);
         위에서 언급했듯이, 템플릿의 목적은 RCObject의 refCount의 증감을 자동화하기 위한 것이다. 예를 들어서, RCPtr이 생성될때 객체는 참조 카운터를 증가시키키 원할 것이고, RCPtr의 생성자가 이를 수행하기 때문에 이전처럼 일일이 코딩할 필요가 없을 것이다. 일단, 생성 부분에서의 증가만을 생각해 본다.
         RCPtr<T>::RCPtr(T* realPtr): pointee(realPtr)
         RCPtr<T>::RCPtr(const RCPtr& rhs): pointee(rhs.pointee)
         void RCPtr<T>::init()
         RCPtr<T>의 정확한 수행을 위해서 T는 복사 생성자를 가지고 있어서, 독립적으로 복사를 수행해야 한다.(다른 말로 deep copy가 이루어 져야 한다.)
         이러한 deep-copy 복사 생성자의 존재는 RCPtr<T>가 가리키는 T에 국한 되는 것이 아니라, RCObject를 상속하는 클래스에도 지원되어야 한다. 사실 RCPtr 객체 관점에서 볼때는 오직 참조 세기를 하는 객체를 가리키기만 하는 관점에서 이것은 납득할수 없는 사실일지 모른다. 그렇지만 이러한 사실이 꼭 문서화 되어 클라이언트에게 알려져야 한다.
         마지막 RCPtr<T>에서의 가성은 T에 대한 형에 관한 것이다. 이것은 확실하게 보인다. 결국 pointee는 T* 형으로 선언되는데, pointee는 아마 T로 부터 유도된 클래스 일지 모른다. 예를 들자면 만약 당신이 SepcialStringValue라는 String::StringValue에서 유도된 클래스가 존재 한다면
         일단 우리는 String에 RCPtr<StingValue> 포인터로 SpecialStringValue 객체를 가리키는 상태로 만들어서 포함시킬수 있다. 이러한 경우에 우리가 원하는 init가 되지 않는다.
         RCPtr<T>& RCPtr<T>::operator=(const RCPtr& rhs)
         RCPtr<T>::~RCPtr()
         T* RCPtr<T>::operator->() const { return pointee; }
         T& RCPtr<T>::operator*() const { return *pointee; }
         먼저, RCObject와 RCPtr을 이용해서 String에 구현한 참조세기의 개념도를 알아 보자.
         class RCPtr { // 여기에서 T는 RCObject를 상속해야 한다.
Found 1 matching page out of 7540 total pages

You can also click here to search title.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.0065 sec