E D R , A S I H C RSS

Full text search for "StringValue"

String Value


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Techniques2of3 . . . . 91 matches
         참조 세기를 하는 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 (5000 pages are searched)

You can also click here to search title.

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