Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
1

Освобождение памяти

26.04.2014, 23:27. Показов 842. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2014, 23:27
Ответы с готовыми решениями:

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Освобождение памяти
Собственно есть простенький класс class Human { public: Human ( ); void ptintHuman(); private: static long...

освобождение памяти
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь выделения памяти double **CreateArray() { double...

8
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,995
Записей в блоге: 1
26.04.2014, 23:29 2
Цитата Сообщение от NEvOl Посмотреть сообщение
Маленький вопросик, как правильно освобождать память выделенную под vector<...>
C++ Скопировано
1
2
3
vector<type> * p = new vector<type>() ;
//...
delete p ;
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
26.04.2014, 23:39  [ТС] 3
Croessmah, а если просто объявляем вектор так:
C++ Скопировано
1
vector<int> a;
тут нужно освобождать память ? или ее освобождают только когда выделяют оператором new ?
0
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,995
Записей в блоге: 1
26.04.2014, 23:43 4
Цитата Сообщение от NEvOl Посмотреть сообщение
тут нужно освобождать память ?
об этом за Вас позаботится деструктор, который будет вызван при уничтожении объекта.
1
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
27.04.2014, 00:12  [ТС] 5
Croessmah, а если необходимо заблаговременно освободить память занимаемую объектом ?
0
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,995
Записей в блоге: 1
27.04.2014, 00:20 6
Цитата Сообщение от NEvOl Посмотреть сообщение
а если необходимо заблаговременно освободить память занимаемую объектом ?
самим объектом или "элементами" вектора?
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
27.04.2014, 00:22  [ТС] 7
и тем и другим.
0
19411 / 10030 / 2443
Регистрация: 30.01.2014
Сообщений: 17,696
27.04.2014, 00:32 8
NEvOl, Для элементов есть clear().
Если сам вектор создан с automatic storage duration, т.е. на стеке, то деструктор ему вручную вызывать нельзя, т.к. он все равно вызовется автоматически в конце области видимости (если это сделать вручную заранее, то будет UB связанное с попыткой вызова деструктора для уже разрушенного объекта).

Добавлено через 1 минуту
Если нужно удалять когда хочется, то надо создавать объект как показывал Croessmah тут. В этом случае вся ответственность за время жизни такого объекта на тебе.
1
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,995
Записей в блоге: 1
27.04.2014, 00:33 9
Цитата Сообщение от NEvOl Посмотреть сообщение
и тем
освободится при разрушении объекта(например, при выходе из функции)
Цитата Сообщение от NEvOl Посмотреть сообщение
и другим.
clear, потом shrink_to_fit (c++11)
или swap с пустым вектором:
C++ Скопировано
1
2
3
4
   std::vector < int > s ( 55 ) ;
   std::cout << s.capacity() << std::endl ;
   {std::vector < int > ().swap(s) ;}
   std::cout << s.capacity() << std::endl ;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2014, 00:33
Помогаю со студенческими работами здесь

Освобождение памяти в c++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же...

Освобождение памяти
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct _MyData { int val1; ...

Освобождение памяти
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и деструктор класса image_bmp? class image { public:...

Освобождение памяти в C++
Добрый день! В моей программе в функции выделяется память (new char) под символьный массив, который является элементом структуры. Это...

Освобождение памяти
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete освобождаю память, но у меня вылетает ошибка...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер