Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
7 / 2 / 0
Регистрация: 19.10.2014
Сообщений: 279

Нужен материал для статьи про управление памятью в С++

05.02.2015, 12:22. Показов 3026. Ответов 43
Метки нет (Все метки)

Добрый день всем, хотел бы написать статью. О управлении памятью С++. Скорее всего речь пойдет о оператов new и delete.
Скажите пожалуйста откуда можно взять такой богатый материал?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2015, 12:22
Ответы с готовыми решениями:

Нужен материал для начинающих
Хочу научиться программировать... Какие программы сейчас более актуальны и с чего начать что бы научится правильно с ними работать?

Реализовать алгоритм работы планировщика. Управление виртуальной памятью. Управление файловой системой
Разработка программы менеджера памяти. Свопинг. Сегментная схема организации памяти. Управление виртуальной памятью. Глобальное и локальное...

Собираю материал для статьи о привычках крутых разработчиков
Поделитесь плиз опытом с начинающим IT-редактором. В инетовских статьях пишут в целом об одном и том же: - Я все время учусь новому ...

43
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
05.02.2015, 13:22
Renji, make_shared для кого придумали?

Добавлено через 2 минуты
Nick Alte, дождались таки mak_unique. Я был удивлен, когда не обнаружил его в C++11 )))
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 13:32
Цитата Сообщение от Renji Посмотреть сообщение
Код C++
1
2
3
4
5
6
struct my_abstract_class
{
public:
virtual void method()=0;
};
std::vector<my_abstract_class>test;
Нельзя создать экземпляр абстрактного класса, но не его потомка, а если сюда сложить указатели, то для создания объекта опять понадобится new.
C++
1
std::vector<std::vector<my_abstract_class>>test;
проблему не решит, так как std::vector<my_abstract_class> ни куда не делся и ни одного элемента не имеет. Но контейнер экземпляров абстрактного класса может понадобиться. Ни один стандартный контейнер от new/delete в пользовательском коде не спасает, соответственно не допустим, так как new/delete должны быть только в членах контейнеров.

Добавлено через 8 минут
Цитата Сообщение от Nick Alte Посмотреть сообщение
Однако же если с детским задором бросаться разрабатывать свой контейнер на каждый чих, при этом искренне полагая себя во всём мудрее и опытнее разработчиков стандартных контейнеров, это станет источником как ненужных трудозатрат, так и несовместимости, уменьшенной читаемости кода и потенциальным источником дополнительных ошибок.
1. О каждом чихе речи не было.
2. При чём здесь мудрость? Передо мной стоит конкретная задача, которую стандартисты в глаза не видели. Ну и как они смогут угадать, что мне нужно? Они что инопланетяне? Тогда да, не мне тягаться со сверхцивилизацией, она уже прошла всё, что недоразвитые могут взяться решать, соответственно все комитетчики знают все задачи из истории. Или может они вообще боги? Тогда на их сверхмудрость и абсолютное знание тоже можно положиться. Только вот беда: они такие же земные программисты. Ну а тогда откуда такие претензии? Соберите в ГАК сколько угодно профессоров, академиков и дважды членкоров, они хором будут дипломный проект знать хуже, чем всего лишь студент, данный диплом защищающий. Просто потому, что он по этой теме работал, а они нет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.02.2015, 13:45
Цитата Сообщение от taras atavin Посмотреть сообщение
А ничего, что они основаны на опыте реальной работы?
Конечно "ничего".


Кто-то сам постоянно явно вызывает new. Новички например, в своих хэлловорлдах.

Кто-то не делает то, что за них может сделать надежный и проверенный механизм.
А кто-то создает эти самые механизмы.

Всякое бывает.

Но называть бредом стремление не делать то, что с тем же успехом можно было бы и не делать - это наивно.
По меньшей мере.
А вообще это просто глупо.

Добавлено через 4 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Нельзя создать экземпляр абстрактного класса, но не его потомка, а если сюда сложить указатели, то для создания объекта опять понадобится new.
смартпоинтеры? Не, не слышал.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 13:47
Цитата Сообщение от hoggy Посмотреть сообщение
смартпоинтеры? Не, не слышал.
А нафиг усугублять то?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
05.02.2015, 13:50
Цитата Сообщение от Renji Посмотреть сообщение
А чтобы получить эти указатели нужен new.
Возможно вы упустили момент подобный следующему?
C++
1
2
3
4
5
class A;
...
A a;
std::vector<a*> vec;
vec.push_back(&a);
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 13:58
Цитата Сообщение от Ilot Посмотреть сообщение
C++
1
2
std::vector<a*> vec;
vec.push_back(&a);
Для того, чтоб взять ссылку на именованный объект, надо уже иметь этот объект. Это костыль, давящий на тормоз, встречается только в программах, устаревших до начала разработки.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
Кто-то не делает то, что за них может сделать надежный и проверенный механизм.
А кто-то создает эти самые механизмы.
Всякое бывает.
Но называть бредом стремление не делать то, что с тем же успехом можно было бы и не
Я ни где не призывал из принципа делать свои контейнеры. Если есть подходящий стандартный, то его надо использовать. Бред является совет всегда упираться в стандарт.
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
05.02.2015, 14:03
Пока не изобрёл свой велосипед, чужим не пользовался.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
05.02.2015, 14:06
taras atavin, на выдерайте слова из контекста. Я писал о совершенно другом и совсем не вам.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.02.2015, 14:17
Цитата Сообщение от taras atavin Посмотреть сообщение
Я ни где не призывал из принципа делать свои контейнеры. Если есть подходящий стандартный, то его надо использовать. Бред является совет всегда упираться в стандарт.
Упираться куда то там никто и не предлагал, если чо.

Смысл тезиса в том, что бы не долбаться вручную там,
где за человека это может сделать надежный проверенный механизм.


Вы прочитали простой и логичный текст, но поняли его в каком то совершенно искривленном виде.
Такое впечатление что бред у вас в голове.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 14:21
Стандартные контейнеры должны появляться так:
1. Прикладник решает задачу, ему нужен контейнер, он читает стандарт, нужного контейнера не находит, пишет свой, потом он решает другие задачи, нужны контейнеры, читает стандарт и свои записки, требуемый контейнер часто находит у себя, причём, один и тот же в разных задачах, публикует своё решение, комитетчики читают, решают ввести данный контейнер в новую версию стандарта.
2. Прикладник решает задачу, ему нужен контейнер, он читает стандарт, нужного контейнера не находит, пишет свой, потом он решает другие задачи, нужны контейнеры, читает стандарт и свои записки, требуемый контейнер часто находит у себя, причём, один и тот же в разных задачах, набравшись опыта сам входит в состав комитета, предлагает свой контейнер остальным комитетчикам, комитетчики совместно решают ввести данный контейнер в новую версию стандарта.
3. Комитетчик, сам выступая в роли прикладника, решает задачу, ему нужен контейнер, он читает стандарт, нужного контейнера не находит, пишет свой, потом он, также выступая в роли прикладника, решает другие задачи, нужны контейнеры, читает стандарт и свои записки, требуемый контейнер часто находит у себя, причём, один и тот же в разных задачах, предлагает свой контейнер остальным комитетчикам, комитетчики совместно решают ввести данный контейнер в новую версию стандарта.
Тогда стандартный контейнер часто будет востребован во многих программах. И вот в тех случаях, когда опять встретилась задача, требующая снова того же контейнера, надо использовать именно его. Ведь он отлажен. Но если подходящего вдруг не нашлось в стандарте, то писать новый. А при разработке действительно нового контейнера, а не оболочки над std::vector и не комбинации существующих контейнеров new/delete приходится использовать явно. Но new/delete должны быть всегда инкапсулированы в контейнеры. Свои, или чужие - это уже вопрос отдельный и решаться должен в каждом конкретном случае.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
05.02.2015, 14:23
Цитата Сообщение от Croessmah Посмотреть сообщение
дождались таки mak_unique. Я был удивлен, когда не обнаружил его в C++11
Видимо, сначала решили "ну зачем нам такая тривиальная функция", а потом одумались.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
05.02.2015, 14:25
А при разработке действительно нового контейнера, а не оболочки над std::vector и не комбинации существующих контейнеров new/delete приходится использовать явно.
Аллокатор.
Вообще, Ваш контейнер, написанный однажды, будет освобождать Вас от ручной работы с памятью.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.02.2015, 14:29
Цитата Сообщение от Nick Alte Посмотреть сообщение
Видимо, сначала решили "ну зачем нам такая тривиальная функция", а потом одумались.
все намного проще: тупо профакапили.
А том, когда обнаружилась пропажа сказали: "да и фик бы с нею! В следующем выпуске запилим".

Добавлено через 53 секунды
Цитата Сообщение от taras atavin Посмотреть сообщение
Но new/delete должны быть всегда инкапсулированы в контейнеры.
Если чо, то стандартные контейнера сами явно new/delete не зовут.
За это отвечает аллокатор.
0
05.02.2015, 14:31

Не по теме:

ух-ты, а материала сколько для статьи накопилось.

0
05.02.2015, 14:33

Не по теме:

Цитата Сообщение от Phoenix_Max Посмотреть сообщение
а материала сколько для статьи накопилось
Это ещё что, а вот если бы сюда Izual заглянул...

0
05.02.2015, 14:36

Не по теме:

Phoenix_Max, угу. Количество стремится к нулю :D

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 14:43
Цитата Сообщение от hoggy Посмотреть сообщение
Если чо, то стандартные контейнера сами явно new/delete не зовут.
За это отвечает аллокатор.
Вот malloc как раз - ещё тот атавизм. Начнём с того, что он вообще не знает типов и не умеет вызывать конструкторы.

Добавлено через 2 минуты
Вообще не важно, где, почему и зачем понадобилось выделять и освобождать память. Это всегда можно снести в подзадачу хранения некой составной сущности и при правильной декомпозиции все операции с памятью окажутся спрятаны в неё.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.02.2015, 14:51
Цитата Сообщение от taras atavin Посмотреть сообщение
Вот malloc как раз - ещё тот атавизм. Начнём с того, что он вообще не знает типов и не умеет вызывать конструкторы.
Вот смотрите, я вам сообщил,
что в стандартные контейнеры не сами занимаются выделением/освобождением памяти.
А за это отвечает аллокатор.

Может быть вы просто не в курсе,
что подразуменвается под "аллокатором стандартного контейнера".

Посмотрите, как выглядит шапка шаблона:

http://www.cplusplus.com/reference/vector/vector/
C++
1
template < class T, class Alloc = allocator<T> > class vector;
Видите там такой параметр, который по дефолту есть std::allocator<T> ?
Это и есть аллокатор, с которым по дефолту работает любой стандартный контейнер.

Соответственно, пользователь всегда может указать свой собственный, если ему так приспичит.

Казалось бы - и при чем тут маллок вообще?

Когда вы пишите свои ответы, вы вообще думаете на что именно вы отвечаете?

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Вообще не важно, где, почему и зачем понадобилось выделять и освобождать память. Это всегда можно снести в подзадачу хранения некой составной сущности и при правильной декомпозиции все операции с памятью окажутся спрятаны в неё.
А теперь заново перечитайте тезис #10
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.02.2015, 14:54
Цитата Сообщение от hoggy Посмотреть сообщение
Вот смотрите, я вам сообщил,
что в стандартные контейнеры не сами занимаются выделением/освобождением памяти.
А за это отвечает аллокатор.
Может быть вы просто не в курсе,
что подразуменвается под "аллокатором стандартного контейнера".
Оператор выше уровнем, чем malloc/calloc/realloc. И вообще сам выделяет память только менеджер памяти, а это часть операционной системы, в остальных случаях вопрос лишь в том, что и как вызывать.
0
7 / 2 / 0
Регистрация: 19.10.2014
Сообщений: 279
05.02.2015, 14:56  [ТС]
Следуя логике, можно создать фонд для мало имущих. А когда они придут сказать что им нужно было стать богатыми и решать другие проблемы с другими людьми.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2015, 14:56

Какой материал можно почитать для создании игр? Книгу, ссылку на статьи. В общем, с чего лучше начать?
Скажите пожалйста какой материал пожно почитать для создании игр. Книгу, ссылку на статьи. Вообщем с чего лучше начать.

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

Нужен материал по языку для начинающего
Здрастувуйте помогите со справочниками по Паскалю.нужен материал по языку.начинаю с нуля.

Нужен материал для увеличения магнитных свойств
Здравствуйте Нужен материал для увеличения нигнитных свойств. Тоесть материал которы бы не проводил ток, но очень хорошо проводил...

Вывести Popup, который содержит в себе материал статьи
Добрый день! Столкнулся со сложностью: Главная страница сайта - плиточный дизайн, с выводом статей в случайном порядке. Кликая...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru