Re[9]: Подсчет ссылок в реализации std:
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.07.04 00:23
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Чего-то я (наверное по недомыслию) не нахожу неоднозначностей в твоем примере... Как вариант моей трактовки:


А кто сказал, что етсь неоднозначности?

F>
F>1  std::string a;
F>2  std::string b;
F>3  a = "aaaa"; // reference count to "aaaa" = 1 (self)
F>4  b = a;      // reference count to "aaaa" = 2 (a and b). Reference count to "aaaa" in b instance = 1;
F>5  a = "bbbb"; // a now owned another string ("bbbb"). 
F>               // Decrement reference count to "aaaa" (if 0 - delete "aaaa"), 
F>               // then allocate new buffer for string, copy string to buffer and set 
F>               // reference count to 1 (exclusive ownership).
F>               // In this sample, b had continue ownership to string "aaaa" with reference count = 1.
F>


Это и есть по сути copy in write. При попытке изменить исходную строку она как бы отделяется от своей копии и живёт отдельной жизнью.

Ничего невозможного в этом нет, кроме того, что это невозможно увидеть в STL Ведь мы обсуждаем не абстракный идеальный класс строки, а std::string и его преимущества перед std::vectro<char> в плане копирования.
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.