Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
4 / 4 / 1
Регистрация: 17.12.2015
Сообщений: 119

Правильное освобождение памяти при std::vector

17.08.2016, 15:41. Показов 8812. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
vector<Worker*> workers;
workers.push_back(new Worker("Jack", 1000))
Как теперь правильно освободить память? Как я понял у вектора есть своё освобождение, но оно освобождает массив указателей, а мне надо освободит то, что по адресу указателей.

P.S. мне кажется, то, что сделал я - это очень плохо. Надеюсь, я не прав, и это можно нормально решить)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2016, 15:41
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Правильное освобождение памяти
Есть код class Test { public: int **container; int counter = 0; Test(unsigned int size) { container = new int*;

Правильное освобождение памяти
Здрасти. Двумерный динам. массив: int** matr=new int*; for (int i=0; i&lt;rows; ++i) matr=new int; ...

46
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
17.08.2016, 21:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
поскольку утечки памяти под аллоцируемый объект в принципе случится не сможет.
Я не говорю про память под вставляемый объект, откройте глаза и посмотрите на код
C++
1
2
vector<Worker*> workers;
workers.push_back(new Worker(...));  //выделяем память под Worker, вызываем push_back, который бросит исключение, Worker "утёк"
Цитата Сообщение от hoggy Посмотреть сообщение
тогда вектор либо успешно вставит элемент
либо успешно откатит всю операцию взад.
А операцию new Worker(...) он тоже откатит?
Цитата Сообщение от hoggy Посмотреть сообщение
продемонстрировать утечку кодом.
Как смоделировать bad_alloc?
1
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
17.08.2016, 21:40

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
C++
1
std::vector::push_back
Это нечестный ответ :D



http://en.cppreference.com/w/c... Exceptions
If an exception is thrown (which can be due to Allocator::allocate() or element copy/move constructor/assignment,), this function has no effect (strong exception guarantee).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct vector
{
    void push_back(int*);
};
 
int main()
{
    vector a;
    a.push_back(new int(10));
    return 0;
}
 
void vector::push_back(int*)
{
    throw "Не смогла я, не смогла";
}
С учетом свопа/виртуальной памяти и т.д. это все относится к exception safety 80-левела, но оно существует.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.08.2016, 21:51
Цитата Сообщение от Operok Посмотреть сообщение
Как смоделировать bad_alloc?
как вариант - фрагментировать память.
но в этом уже нет необходимости.

Цитата Сообщение от Operok Посмотреть сообщение
Я не говорю про память под вставляемый объект, откройте глаза и посмотрите на код
я не сразу понял, что вы имели ввиду.
да. вы правы.
здесь может быть утечка.
2
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
18.08.2016, 00:37
Цитата Сообщение от hoggy Посмотреть сообщение
Правило 48: Изучите метапрограммирование шаблонов
вообще не об этом.
Прошу прощения. не туда посмотрел. Правило 17. Помещение в «интеллектуальный» указатель объекта, выделенного с помощью new, лучше располагать в отдельном предложении.
Он там как раз описывает ситуацию с "повисшим" new.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.08.2016, 13:37
JackLas, Это range-based for, появился в С++11 и работает со всеми контейнерами STL.
0
2405 / 1935 / 763
Регистрация: 27.07.2012
Сообщений: 5,574
18.08.2016, 13:41
Непонятно только, почему он называется диапазонным, хотя в нём задаётся набор элементов.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.08.2016, 15:31
Из готового вероятно стоит посмотреть boost::ptr_vector<>

John Prick, Ну типа вероятно весь диапазон значений имеется ввиду, а не только часть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2016, 15:31

Vector string'ов и освобождение памяти
Как известно вектор не освобождает память. В подавляющем большинстве случаев string работает на основе вектора (т.к. если использовать...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Поменять make и release так, чтобы организовать правильное уничтожение объектов и освобождение памяти
Имеем код: #include &lt;iostream&gt; struct Base { public: ~Base() { std::cout &lt;&lt; &quot;Base::~Base&quot; &lt;&lt; std::endl; } ...

Представление памяти std::vector
Добрый день! Вопрос по вектору, из его описание следует, что он располагает свои элементы линейно до тех пор пока это возможно, а в случае...

std::vector Перераспределение памяти
Код #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;tchar.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru