E D R , A S I H C RSS

BackLinks search for "StringValue"

BackLinks of StringValue


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Techniques2of3
         참조 세기를 하는 String 클래스를 만드는건 어렵지는 않지만, 세세한 부분에 주목해서 어떻게 그러한 클래스가 구현되는지 주목해 보자. 일단, 자료를 저장하는 저장소가 있고, 참조를 셀수 있는 카운터가 있어야 하는데, 이 둘을 하나로 묶어서 StringValue 구조체로 잡는다. 구조체는 String의 사역(private)에 위치한다.[[BR]]
          struct StringValue { ... }; // 참조를 세는 인자와, String의 값을 저장.
          StringValue *value; // 위의 구조체의 값
          struct StringValue {
          StringValue(const char *initValue);
          ~StringValue();
         // StringValue의 복사 생성자, 초기화 목록으로 refCount 인자 1로 초기화
         String::StringValue::StringValue(const char *initValue): refCount(1)
         // StringValue의 파괴자
         String::StringValue::~StringValue()
         이것으로 StringValue의 구현은 일단 끝이다. 이를 사용하는 String 객체의 구현에 들어가야 한다.
         // String의 복사 생성자, 초기화 목록으로 StringValue에 값을 할당한다.
         String::String(const char *initValue): value(new StringValue(initValue))
         // String 클래스의 복사 생성자, 초기화 목록으로 StringValue의 포인터를 세팅한다.
         생성자의 손쉬운 구현같이 파괴자 구현도 그리 어려운 일이 아니다. StringValue의 파괴는, 서로가 최대한 사용하고, 값이 파괴 시점은 참조 카운터가(reference counter:이하 참조 카운터만) 1인 경우 더이상 사용하는 객체가 없으므로 파괴하도록 구성한다.
         하지만 non-const의 operator[]는 이것(const operator[])와 완전히 다른 상황이 된다. 이유는 non-const operator[]는 StringValue가 가리키고 있는 값을 변경할수 있는 권한을 내주기 때문이다. 즉, non-const operator[]는 자료의 읽기(Read)와 쓰기(Write)를 다 허용한다.
          value = new StringValue(value->data); // 현재 자료의 사본을 만들어
          // 이제, 아무도 공유하고 있지 않은 StringValue의 객체
         String 복사 생성자가 아마 s2가 s1의 StringValue를 공유하게 만들것이다. 그래서 당음과 같은 그림으로 표현될 것이다.
          struct StringValue {
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.0091 sec