Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.99/70: Рейтинг темы: голосов - 70, средняя оценка - 4.99
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Когда выделять память

08.10.2020, 18:18. Показов 15701. Ответов 201

Студворк — интернет-сервис помощи студентам
вот завис в моём понимании этот пункт:
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
в случае динамического выделения памяти. Без которого ты вряд ли сделаешь что-то полезное.
в той же ветке - были даны пояснения
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В стеке ты не можешь свободно создавать/удалять объекты. Только добавлять в голову и удалять оттуда же. В куче же ты можешь это делать в любой последовательности.
...
когда выделять поток - в принципе поняла,
когда выделять класс - в принципе поняла (чтобы разорвать зависимости)
КОГДА выделять память?.. - всё-таки ещё не всегда очень хочется её выделять, чтобы потом удалять... но даже не в этом суть... а смысл первой цитаты?
поделитесь please опытом кто-нибудь - когда вы выбираете создать объект на стеке, а когда вы выбираете создать объект в куче?. - какие есть предпосылки для вашего выбора?
не хочу потом всё переделывать - а мне всё равно кажется, что на стеке всегда быстрее, а когда и почему лучше куча не знаю... а то ведь могу написать что попало...
логично, что на стеке - определена последрвательность, но ведь при обращении к разным объектам проблем вроде не бывает... имхо... и понятно, что через стек идут параметры функций - так что получается, всё остальное, т.е. вообще всё лучше располагать в куче?
какую проблему можно получить, если всё располагать на стеке? и в каком случае вообще app не запуститься при таком подходе (есть ли такая опасность)?.. есть ли какие-то критерии "must do"? и никак иначе
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2020, 18:18
Ответы с готовыми решениями:

Как лучше выделять память: динамичски или в стэке?
Я раньше всегда думал, что в стеке происходит более быстрое выделение, но сейчас нашел в интернете одну статью, где было написано: ...

Можно ли через список инициализации выделять память в куче
Можно через список инициализации выделять память в куче?

Как динамически выделять память на один элемент массива?
Вот программа: int main() { int n,a,b; Item *mas; cout << "Enter amount of coordinates" << endl; cin >>...

201
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:22  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это ни как не противоречит тому что new используется. Я не говорил от том что его необходимо использовать. Однако передать std::make_unique конструктор не всегда возможно. Дело в том, что есть фабрики и закрытые конструктора.
что-то мне вообще кажется, что фабрика - returning pointers to Dynamically allocated objects - в принципе отжила своё - с появлением move-семантики и rvalue T&& (as temporary object)... т.е. с появлением возможности передать владение ресурсом другому объекту - отпадает и необходимость закладываться на общий деструктор для полиморфных классов... имхо... сложность управления памятью отжила своё - уже, наверно, даже с просто появлением классов контейнеров (более высокоуровневых, чем array)...

Добавлено через 1 минуту
также, как и многие паттерны - уже не актуальны в свете новых возможностей C++ - std::move, rvalue T&&, lambda-functions... ? может что-то ещё перевернуло этот мир C++?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2020, 12:27
Цитата Сообщение от JeyCi Посмотреть сообщение
что-то мне вообще кажется, что фабрика - returning pointers to Dynamically allocated objects - в принципе отжила своё - с появлением move-семантики и rvalue T&& (as temporary object)... т.е. с появлением возможности передать владение ресурсом другому объекту - отпадает и необходимость закладываться на общий деструктор для полиморфных классов... имхо... сложность управления памятью отжила своё - уже, наверно, даже с просто появлением классов контейнеров (более высокоуровневых, чем array)...
В смысле, это как? Фабрика, она вроде создаёт разные объекты, в зависимости от параметров функции. Как там без виртуальных деструкторов можно обойтись?
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:34  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
она вроде создаёт
так ведь, как создаст, так и std::move можно куда угодно, где по месту и удалять...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2020, 12:37
Цитата Сообщение от JeyCi Посмотреть сообщение
так ведь, как создаст, так и std::move можно куда угодно, где по месту и удалять...
Фабрика вроде возвращает указатель на базовый класс. Без виртуального деструктора его никак не удалить
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:40  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Фабрика вроде возвращает указатель на базовый класс.
в коде на объект им созданный - разве его (указатель) нельзя передать во владение, куда на сторону?.. там и удалять?.. это ведь раньше права владения были жёстко закреплены за производителем (мне так кажется)?.. сейчас вроде арсенал по-шире (например, std::move)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.10.2020, 12:42
Цитата Сообщение от JeyCi Посмотреть сообщение
так ведь, как создаст, так и std::move можно куда угодно, где по месту и удалять...
А потом?

Короче кому-то нужно почитать про классы и про ООП в С++ ...
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2020, 12:46
Цитата Сообщение от JeyCi Посмотреть сообщение
в коде на объект им созданный - разве его (указатель) нельзя передать во владение, куда на сторону?.. там и удалять?.. это ведь раньше права владения были жёстко закреплены за производителем (мне так кажется)?..
Причём здесь владение? Ты просто не сможешь нормально удалить объект по указателю на базовый класс без виртуального деструктора или виртуального метода удаления.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:49  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
и про ООП в С++ ...
вообще избавлятся от него надо - заменяя лямбдами... - чтобы не перегружать код

Добавлено через 2 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
удалить объект по указателю на базовый класс
я бы хотела обнулять этот ненужный указатель, делать его nullptr, и распоряжаться объектом по месту (ведь при std::move я не копирую указатель, но и не теряю связь с местоположением объекта в памяти, а права владения (значит и удаление) - уже в объекте др. класса... имхо)... - неужели я многого хочу?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2020, 12:50
Цитата Сообщение от JeyCi Посмотреть сообщение
вообще избавлятся от него надо - заменяя лямбдами... - чтобы не перегружать код
Нет, так получится. Тем более с лямбдами, которые те же виртуальные методы, только сбоку. Можно минимизировать использование виртуальных методов при помощи шаблонов, но не более того.

Добавлено через 34 секунды
Цитата Сообщение от JeyCi Посмотреть сообщение
я бы хотела обнулять этот ненужный указатель, делать его nullptr, и распоряжаться объектом по месту... - неужели я многого хочу?
В смысле, это как?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2020, 12:51
Цитата Сообщение от JeyCi Посмотреть сообщение
вообще избавлятся от него надо - заменяя лямбдами... - чтобы не перегружать код
Надо от плюсов избавляться. Полиморфные фабрики и случаи закрытых конструкторов - в корзину. Ок.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:54  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
с лямбдами, которые те же виртуальные методы, только сбоку
спасибо!
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2020, 12:56
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
только сбоку
Они - вроде локальные (или нелокальные - скоповые то есть) функторы-объекты сбоку. Вылитые.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2020, 12:58
Цитата Сообщение от IGPIGP Посмотреть сообщение
Они - вроде локальные (или нелокальные - скоповые то есть) функторы-объекты сбоку. Вылитые.
Я имел ввиду использовать указатели на функцию, в том числе на лямбду, вместо виртуальных методов. Возможно, неправильно понял и неправильно выразился.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 12:59  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
вроде локальные ... функторы-объекты сбоку
а уже кода меньше... чем писать "класс-Адаптер для функции"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2020, 14:07
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я имел ввиду использовать указатели на функцию, в том числе на лямбду, вместо виртуальных методов. Возможно, неправильно понял и неправильно выразился.
Понятно. Сбоку они все коляблы (господи прости). Но если идти до конца, то функции main достаточно всегда. Мелкие неудобства не причина для малодушия. Нужно идти до конца!
oleg-m1973, это - последнее, - не вам)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.10.2020, 14:31
Цитата Сообщение от JeyCi Посмотреть сообщение
вообще избавлятся от него надо - заменяя лямбдами... - чтобы не перегружать код
Теперь кому-то стоит почитать еще и про лямбды
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 14:46  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
кому-то нужно почитать про классы
тоже ведь вопрос - зачем классы - ответ: чтобы обернуть в них ресурс... скрыть с глаз долой... а в свете нового С++ можно и "из сердца вон" - с помощью std::move... сугубо моё видение С++ начиная с v.11 ... а если уж так нужен доступ к аллоцированной памяти для удаления, то чем Deleter в unique_ptr не устраивает?.. кстати и лямбдой, вероятно, можно оформить... имхо... а о том Creator'e из фабрики уже все и забудут к моменту отделения объекта от фабрики... ему (Creator'у) ведь тоже можно какой scope_guard сделать или в smart_pointer завернуть - понятно, что по-default'у будет вызываться виртуальный деструктор (логично бы)... и всё - ресурс памяти уже существует отдельно, ресурс Creator'а (указатель, например) уже может и не существовать, если никому не нужен...
но если смысл фабрики лишь в аллокации динамической памяти под объекты - то она мне в принципе и не нужна... коль в std-классах всё уже давно аллоцируется без меня... я стандарт писать не собираюсь...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2020, 14:53
Цитата Сообщение от JeyCi Посмотреть сообщение
зачем классы
Цитата Сообщение от JeyCi Посмотреть сообщение
а в свете нового С++ можно и "из сердца вон" - с помощью std::move...
Оно объекты двигает. А классы двигать можно лишь усилием мышленья и волею сердца. Да. Из сердца вон. А с глаз как? Они же ни куда не денутся. Будут прыгать снаружи и смущать бедное сердце нечестивыми словоизъявлениями и возгласами разными.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.10.2020, 15:01  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
А классы двигать можно лишь
если ваше понимание всех моих постов выше такое - читайте ещё... или двигайте классы... коль std::move прочитать не можете
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2020, 15:03
Цитата Сообщение от JeyCi Посмотреть сообщение
читайте ещё... или двигайте классы...
Я подумаю)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2020, 15:03

Подскажите пожалуйста, правильно выделять память под lua состояние
Подскажите пожалуйста, правильно выделять память под lua состояние. Выполнение кода не возвращает 0. Сам код не мой, его ...

Нужно ли под массив выделять память функциями malloc или new?
собственно вот программа по вводу размера массива, вводу массива, сортировки: #include <iostream> #include <windows.h> ...

Можно ли, используя make_shared<T> выделять память под массивы, по аналогии с функцией make_unique<T>?
Интересует следующий вопрос. Можно ли, используя данную функцию выделять память под массивы, по аналогии с функцией make_unique&lt;T&gt;....

Функция: подсчет количества слов во введенной строке (под строку выделять динамическую память)
Доброго времени суток! Осваиваю С++, возникла проблема с написанием программы. По заданию необходимо написать функцию, подсчитывающую...

Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект класса с помощью функций calloc, malloc или...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru