Здравствуйте, 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> в плане копирования.