Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найдите максимальное k, для которого можно соответствующим образом выбрать 2k + 1 день Группа альпинистов покорила много вершин и возвратилась в родной город. Одна из местных газет решила написать статью об их походе. Как выяснилось, в процессе похода альпинисты N раз останавливались на ночлег на той или иной высоте. Поскольку главный редактор газеты настаивает, чтобы название статьи было “Восхождение и спуск”, решено было не упоминать о некоторых днях похода, рассказав лишь о... https://www.cyberforum.ru/ cpp-beginners/ thread1163408.html Вывести в алфавитном порядке все уникальные символы C++
Доброго времени суток! Вопрос: задан массив из К символов латинского алфавита. Вывести на экран в алфавитном порядке все символы, которые входят в этот массив по одному разу. У меня не выходит сделать цикл по удалению повторяющихся элементов. Спасибо заранее вот код: #include "stdafx.h" #include <iostream> #include <time.h> using namespace std;
C++ Форматы чисел, циклы | задача Дано n вещественных чисел. Найти количество тех из них, которые после усечения стали больше 15 , четны и кратны 5. https://www.cyberforum.ru/ cpp-beginners/ thread1163406.html C++ Программа удаленного управления компьютерами в сетях используя объектно-ориентированную технологию с++ https://www.cyberforum.ru/ cpp-beginners/ thread1163401.html
Вообщем, нужна написать программу которая обеспечивает: - удаленный доступ к клиенту, позволяя открывать и редактировать файлы, запускать программы и выполнять работу с помощью локальной или глобальной сети; - удаленное управление и просмотр удаленного рабочего стола клиента - удаленное управление питанием компьютера клиента; - удаленное управление компьютером клиента через командную...
Динамическое создание экземпляров класса C++
Здравствуйте, у меня следующий вопрос: Я пытаюсь создать что-то на подобии очереди из автомата. Для этого я использую SFML. Как известно, из автомата летят пули. Для этого я решил использовать массив, динамический массив. Но проблема заключается в том, что при "попадании в цель" этот элемент массива должен уничтожаться, а на его место вставать новый. Подскажите, пожалуйста, как это реализовать....
C++ Разбить строку на слова, добавить эти слова в массив строк https://www.cyberforum.ru/ cpp-beginners/ thread1163367.html
Привет всем! Понадобилось решить одну простенькую задачку: Разбить строку на слова, добавить эти слова в массив строк, вывести содержимое массива строк. Попытался сделать сам,написал что-то быдлокодерское)) #include <iostream> #include <string>
C++ Ошибка W8026 Functions with exception specifications are not expanded inline class ExpRDMS: public std::exception { private: __int16 stat; String functionName; String TextStat; public: virtual ~ExpRDMS() throw(){} ExpRDMS(); https://www.cyberforum.ru/ cpp-beginners/ thread1163348.html C++ Работа со строками
Доброго времени суток! Помогите исправить программу: Дан текст, слова которого отделяются друг от друга пробелами. Если первое слово является максимальным по длине, то все слова, которые заканчиваются той же буквой, что и первое слово, поместить в конец текста. Программку я написал, но выводит лишь максимальное слово и одно слово слово заканчивающиеся на ту же букву, а должно было переместить...
C++ Как считывать с консоли до определённого условия? Мне нужна программа, которая считывала имя папки снова и снова, пока эта папка с таким именем не будет существовать. Сам я написал такую: char folder; while (DirectoryExists(folder) == false) { printf("Enter folder name: "); scanf(folder); } Но она считывает только один раз, а потом идут бесконечные Enter folder name, без считыания. https://www.cyberforum.ru/ cpp-beginners/ thread1163344.html C++ Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех раз, для каждого из эти мне нужно срочно!!!! помоги чем сможете. С++ Добавлено через 19 секунд Вот задание Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех раз, для каждого из этих символов указать точное количество повторений. https://www.cyberforum.ru/ cpp-beginners/ thread1163332.html
Глобальные переменные C++
Здравствуйте . Разбираю пример с книги на использование глобальных переменных . Там был такой пример: #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; int count; //глобальная переменная void f1(void);
C++ Шаблоны функций обработки одномерного массива всем привет! недавно начал изучать шаблоны функций. вот написал программу, посмотрите пожалуйста, правильно ли сделал? // Задание: // В одномерном массиве, состоящем из n вещественных элементов, вычислить: // 1. сумму отрицательных элементов массива; // 2. произведение элементов массива, расположенных между максимальным и минимальным элементами. // 3. Упорядочить элементы массива по...
18775 / 9786 / 2394
Регистрация: 30.01.2014
Сообщений: 17,177
01.05.2014, 17:06 0

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

01.05.2014, 17:06. Показов 1511. Ответов 4
Метки (Все метки)

Лучший ответ Сообщение было отмечено relationer как решение

Решение

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()!? Она-ж зарезервирована! Утечка!
Да, утечка. Не стоит так делать.

Вернуться к обсуждению:
Куда деваются одномоментные указатели, или управление памятью в работе с std::string C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2014, 17:06
Готовые ответы и решения:

Ошибка terminate called after throwing an instance of 'std::bad_alloc' при работе с типом std::string
Добрый вечер, при работе функции возникает ошибка terminate called after throwing an instance...

Есть 4 потока. После осуществления блокировки барьером, 3 куда-то деваются, куда? (pthreads)
Друзья! Как мог упростил код, вот суть В цикле создаются 4 вспомогательных потока, кадый из...

Управление динамической памятью при работе с классами
Всем привет! Есть очень сложный класс, внутри которого есть куча указателей, в его конструкторе...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

4
01.05.2014, 17:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2014, 17:06
Помогаю со студенческими работами здесь

Куда будет указывать указатель в std::map<string,pointer *>?
Чисто теоретически,хотелось бы узнать у знатоков C++ Допустим есть некий контейнер ...

Запись значения типа String^ в char* или std::string
String^ D1=textBox1-&gt;Text; Int32 D2=Convert::ToInt32(textBox2-&gt;Text); //god Int32...

Куда деваются комментарии?
Всем привет! Делаю поиск Сервис-&gt;Code Refernces. В окне &quot;Code Refernces&quot; появляется результат...

Где и почему используют ту или иную строку std::string, char[], System::String^ ?
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru