|
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
|
||||||
Функция возвращает string и механизм перемещения25.01.2025, 04:03. Показов 1574. Ответов 6
Метки нет (Все метки)
Всем доброго дня!
Таким образом, не тратим времени на долго копирование, но получаем тот же результат. Вот только у меня вопрос, на который не могу найти пояснение: У меня в голове есть 2 парадигмы. 1 - Локальные переменные, это автоматическое "занятие" памяти и его освобождение, после выхода из области видимости. 2 - Чтобы "занятая" память оставалась таковой за пределами области видимости, мы ее должны "полноценно" "занять". А после она будет занята, до тех пор, пока мы ее сами не освободим. Так вот, при современном копировании память остается занятой за пределами области видимости создания, но, что произойдет, когда я выйду из области видимости str? Память для строки "line" сама освободиться? Или без принудительного освобождения память "утечет"?
0
|
||||||
| 25.01.2025, 04:03 | |
|
Ответы с готовыми решениями:
6
функция choose(n:byte; c1: string): string возвращает значение из списка
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|||||||
| 25.01.2025, 07:40 | |||||||
Сообщение было отмечено Elesh_Makfa как решение
Решениеstring? Это std::string? Как мы об этом должны догадаться? Переменная res действительно исчезнет, если компилятор применит RVO. То есть результат будет формироваться сразу в переменной str.Однако никакого "присвоят указатель на строку "line" не будет. Класс std::string копирует данные внутрь себя. Он хранит свою копию строки, а не указатель на внешние данные. Он не умеет никакого "присвоят указатель на строку". Строка "line" будет сохранена внутри str в каком-то виде (скопирована внутрь). После этого к исходному литералу "line" объект str уже не имеет никакого отношения.И ни о каком "присвоят" вообще тут речи не идет. В вашем коде нет ни одного присваивания. res в str, потому что res просто не будет вообще, а вместо res результат будет сформирован прямо в str. Однако от копирования литерала "line" внутрь str мы никак не избавились. Это копирование никуда не денется.str будет уничтожен. Его деструктор отвободит всю память, которая принадлежит str."line" все это не имеет никакого отношения. Литерал "line" никак не связан с str. Литерал "line" живет в статической памяти и не освобождается никогда.
1
|
|||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||
| 25.01.2025, 12:28 | |||||||
Сообщение было отмечено Elesh_Makfa как решение
РешениеДобавлено через 12 минут Я расскажу как понимаю про RVO, а если где навру - надеюсь меня поправят знающие товарищи. Исходный код будет примерно преобразован компилятором в такое:
1) вызов конструктора str без параметров; 2) вызов оператора = для res (оно же str) ну и все на этом. (вызов деструктора str будет, конечно, но это и так понятно) А не совсем правда потому, что по факту будет вызван только конструктор для string(const char*) и все, лишнего конструирования и присваивания не будет. Т.к. компилятор на самом деле передаёт не ссылку на уже сконструированный объект str, а как бы адрес выделенной на стеке памяти, в которой будет размещен и сразу сконструирован с нужными параметрами объект res (оно же str) в тот момент, когда внутри функции первый раз появится определение res
1
|
|||||||
|
фрилансер
6431 / 5626 / 1126
Регистрация: 11.10.2019
Сообщений: 14,967
|
|
| 25.01.2025, 14:14 | |
|
1
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|||||
| 25.01.2025, 17:15 | |||||
std::string. Без возможности сделать такое предположение вопрос будет являться бессмысленным "словесным салатом", ни о каких ответах на который речи идти не будет.string. В частности, откуда вы взяли, что конструктор для string(const char*) вообще существует? По каковой причине первый и главный вопрос, который сразу же задает любой мало-мальски разбирающийся в теме человек: что такое string?string?
0
|
|||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||
| 25.01.2025, 17:41 | |||||||
|
Ибо ваше разъяснение лично я бы не понял, если бы не знал о чем речь. Вы же не закрепляете за собой право на возможность эксклюзивно отвечать? Вам нет? ну ок.
0
|
|||||||
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|||||
| 25.01.2025, 20:56 | |||||
|
1
|
|||||
| 25.01.2025, 20:56 | |
|
Помогаю со студенческими работами здесь
7
Функция stuff(c1,c2:string;n1,n2:byte) возвращает строку, полученную путём удаления позиций Создать класс, в котором механизм перемещения кнопки, для создания его экземпляров
Есть ли механизм быстрой инициализации структур содержащих vector, string ? функция padright(c:string; ch:char; n:byte): string - выравнивает строку С по размеру N. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|