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

Куда деваются одномоментные указатели, или управление памятью в работе с std::string - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найдите максимальное k, для которого можно соответствующим образом выбрать 2k + 1 день http://www.cyberforum.ru/cpp-beginners/thread1163408.html
Группа альпинистов покорила много вершин и возвратилась в родной город. Одна из местных газет решила написать статью об их походе. Как выяснилось, в процессе похода альпинисты N раз останавливались...
C++ Вывести в алфавитном порядке все уникальные символы Доброго времени суток! Вопрос: задан массив из К символов латинского алфавита. Вывести на экран в алфавитном порядке все символы, которые входят в этот массив по одному разу. У меня не выходит... http://www.cyberforum.ru/cpp-beginners/thread1163407.html
C++ Форматы чисел, циклы | задача
Дано n вещественных чисел. Найти количество тех из них, которые после усечения стали больше 15 , четны и кратны 5.
Программа удаленного управления компьютерами в сетях используя объектно-ориентированную технологию с++ C++
Вообщем, нужна написать программу которая обеспечивает: - удаленный доступ к клиенту, позволяя открывать и редактировать файлы, запускать программы и выполнять работу с помощью локальной или...
C++ Динамическое создание экземпляров класса http://www.cyberforum.ru/cpp-beginners/thread1163381.html
Здравствуйте, у меня следующий вопрос: Я пытаюсь создать что-то на подобии очереди из автомата. Для этого я использую SFML. Как известно, из автомата летят пули. Для этого я решил использовать...
C++ Разбить строку на слова, добавить эти слова в массив строк Привет всем! Понадобилось решить одну простенькую задачку: Разбить строку на слова, добавить эти слова в массив строк, вывести содержимое массива строк. Попытался сделать сам,написал что-то... подробнее

Показать сообщение отдельно
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
01.05.2014, 17:06
relationer, во-первых читай про RVO.
во-вторых есть техника COW. std::string ее не использует (в новом стандарте это явно запрещено, в старых не пользовалось популярностью), но можно создать свой класс с такой реализацией или использовать готовый.
В третьих, в С++11 есть move semantics. А в предыдущих это реализуется вот этим паттерном.

Цитата Сообщение от relationer Посмотреть сообщение
C++
1
2
3
std::string *pointer = getHome();
std::string s = "Nja" + *pointer;
delete pointer;
Так лучше не делать. Ибо безопасность исключений.
Цитата Сообщение от relationer Посмотреть сообщение
сигнатуры некоторых методов из стандартной библиотеки для работы с std::string возвращают std::string&.Как они это делают?
Это надо каждый конкретный случай отдельно рассматривать.
Цитата Сообщение от relationer Посмотреть сообщение
Создают новый указатель - т. е. выделяют в куче независимо от меня память?
Нет. Давай конкретный пример - объясню.
Цитата Сообщение от relationer Посмотреть сообщение
И мне ее потом очищать вручную?
Нет.
Цитата Сообщение от relationer Посмотреть сообщение
Зависит ли это от степени оптимизации?
Зависит, если рассматривать твои первые примеры.
Цитата Сообщение от relationer Посмотреть сообщение
Что происходит при контакенции строк при использовании std::string - если создается новая строка, использующая новую память, как очищать предыдущие ненужные?
Создается новая строка. Очищают память деструкторы.
Цитата Сообщение от relationer Посмотреть сообщение
Как вообще грамотно распределять память в подобных случаях?
Вручную в данном случае ничего распределять не надо. Или тогда std::string не тот класс, который тебе нужен. "Грамотность" зависит от задачи и от результатов профилирования.

Добавлено через 1 минуту
Цитата Сообщение от relationer Посмотреть сообщение
Стоп, а куда девается память, выделенная getHome()!? Она-ж зарезервирована! Утечка!
Да, утечка. Не стоит так делать.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru