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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найдите максимальное k, для которого можно соответствующим образом выбрать 2k + 1 день http://www.cyberforum.ru/cpp-beginners/thread1163408.html
Группа альпинистов покорила много вершин и возвратилась в родной город. Одна из местных газет решила написать статью об их походе. Как выяснилось, в процессе похода альпинисты N раз останавливались на ночлег на той или иной высоте. Поскольку главный редактор газеты настаивает, чтобы название статьи было “Восхождение и спуск”, решено было не упоминать о некоторых днях похода, рассказав лишь о...
C++ Вывести в алфавитном порядке все уникальные символы Доброго времени суток! Вопрос: задан массив из К символов латинского алфавита. Вывести на экран в алфавитном порядке все символы, которые входят в этот массив по одному разу. У меня не выходит сделать цикл по удалению повторяющихся элементов. Спасибо заранее вот код: #include "stdafx.h" #include <iostream> #include <time.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1163407.html
C++ Форматы чисел, циклы | задача
Дано n вещественных чисел. Найти количество тех из них, которые после усечения стали больше 15 , четны и кратны 5.
Программа удаленного управления компьютерами в сетях используя объектно-ориентированную технологию с++ C++
Вообщем, нужна написать программу которая обеспечивает: - удаленный доступ к клиенту, позволяя открывать и редактировать файлы, запускать программы и выполнять работу с помощью локальной или глобальной сети; - удаленное управление и просмотр удаленного рабочего стола клиента - удаленное управление питанием компьютера клиента; - удаленное управление компьютером клиента через командную...
C++ Динамическое создание экземпляров класса http://www.cyberforum.ru/cpp-beginners/thread1163381.html
Здравствуйте, у меня следующий вопрос: Я пытаюсь создать что-то на подобии очереди из автомата. Для этого я использую SFML. Как известно, из автомата летят пули. Для этого я решил использовать массив, динамический массив. Но проблема заключается в том, что при "попадании в цель" этот элемент массива должен уничтожаться, а на его место вставать новый. Подскажите, пожалуйста, как это реализовать....
C++ Разбить строку на слова, добавить эти слова в массив строк Привет всем! Понадобилось решить одну простенькую задачку: Разбить строку на слова, добавить эти слова в массив строк, вывести содержимое массива строк. Попытался сделать сам,написал что-то быдлокодерское)) #include <iostream> #include <string> подробнее

Показать сообщение отдельно
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
01.05.2014, 17:06     Куда деваются одномоментные указатели, или управление памятью в работе с std::string
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()!? Она-ж зарезервирована! Утечка!
Да, утечка. Не стоит так делать.
 
Текущее время: 09:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru