Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
#1

Счетчик в классе string - C++

05.06.2014, 22:47. Просмотров 216. Ответов 4
Метки нет (Все метки)

имеется такой код
C++
1
2
3
4
5
6
...
string s = "Hello world";
string s1;
s1 = s;
s[0] = 'h';
...
В строчке где s1 = s по сути не происходит выделения новой памяти и s1 просто указывает на ту же область памяти, что и s.

Далее, в следующей строчки происходит модификация строки и, так как на одну и ту же область памяти указывают s и s1, то строчка сначала копируется в другую область памяти, а потом модифицируется. В итоге в s теперь строка "hello world", a в s1 - "Hello world".

Из всего этого следует, что имеется счетчик, который содержит в себе количество указателей на выделенную область памяти. Вопрос - а где этот счетчик хранится? Первое предположение, что этот счетчик находится рядом со словом в памяти оказалось ошибочным - смотрел в отладчике, никаких счетчиков в рядом с выделенной памятью нету. Второе предположение, что в классе basic_string есть статическая переменная для этих целей, тоже не увенчалось успехом.

Подскажите кто знает, как все таки это там реализовано? Знаю, что можно посмотреть исходники - смотрел, но не смог разобраться...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 22:47     Счетчик в классе string
Посмотрите здесь:

C++ Одновременная реализация константного и неконстантного оператора [] в классе string
Отличие string и String C++
string = define + string ; C++
Что такое _Bx в классе string C++
C++ В классе string перегрузить операцию вчитания
string обьявленый в классе передать в параметры конструктора C++
C++ Сортировка строки по алфавиту в классе String
C++ Перегруженный оператор = в классе String
C++ Поле типа string в классе, как и где лежит?
Инициализация массива строк string в классе C++
Преобразование string* в string C++
String в классе (конструктор): когда стоит применять указатели и динамическое выделение памяти? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.06.2014, 23:14     Счетчик в классе string #2
Цитата Сообщение от deniska91 Посмотреть сообщение
В строчке где s1 = s по сути не происходит выделения новой памяти и s1 просто указывает на ту же область памяти, что и s.
Далее, в следующей строчки происходит модификация строки и, так как на одну и ту же область памяти указывают s и s1, то строчка сначала копируется в другую область памяти, а потом модифицируется.
Откуда такая информация?
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
05.06.2014, 23:18  [ТС]     Счетчик в классе string #3
Да вот из лекции по С++ с сайта Лекториум.

Прошелся детальнее отладчиком, все таки при присваивании одного стринга другому, строка копируется.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.06.2014, 23:25     Счетчик в классе string #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Здесь почитайте, пригодится: http://cpp.com.ru/meyers/ch2.html#t30
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
05.06.2014, 23:33  [ТС]     Счетчик в классе string #5
Спасибо, это то что нужно
Yandex
Объявления
05.06.2014, 23:33     Счетчик в классе string
Ответ Создать тему
Опции темы

Текущее время: 03:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru