Re[8]: Подсчет ссылок в реализации std:
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 22.07.04 20:50
Оценка: +1 :)
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Шахтер, Вы писали:


CS>>>Это ты про std::string ?

Ш>>Ну почему. Про любую вменяемую реализацию строк.

A>странные ты вещи говоришь. По твоим словам выходит так.


A>
A>1  std::string a;
A>2  std::string b;
A>3  a = "aaaa";
A>4  b = a;
A>5  a = "bbbb";
A>


A>Либо после выполнения пятой строки значение b так же равно "bbbb", либо при выполнении пятой строки создаётся копия строки a (copy on write), а для этого строка a должна умето получать список всех своих копий.

A>И то и другое мало похоже на правду

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

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


Сорри фор инглиш — пиво было хорошее, и, как следствие закона сохранения энергии — инглиш получился фиговым
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.