Здравствуйте, 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.
Сорри фор инглиш — пиво было хорошее, и, как следствие закона сохранения энергии — инглиш получился фиговым