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

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

26.04.2014, 23:27. Показов 836. Ответов 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 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,998
Записей в блоге: 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 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,998
Записей в блоге: 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 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,998
Записей в блоге: 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,695
27.04.2014, 00:32 8
NEvOl, Для элементов есть clear().
Если сам вектор создан с automatic storage duration, т.е. на стеке, то деструктор ему вручную вызывать нельзя, т.к. он все равно вызовется автоматически в конце области видимости (если это сделать вручную заранее, то будет UB связанное с попыткой вызова деструктора для уже разрушенного объекта).

Добавлено через 1 минуту
Если нужно удалять когда хочется, то надо создавать объект как показывал Croessmah тут. В этом случае вся ответственность за время жизни такого объекта на тебе.
1
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,998
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер