Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

Почему возникает утечка памяти? - C++

17.01.2013, 22:08. Просмотров 351. Ответов 3
Метки нет (Все метки)

Возник вопрос почему может возникать утечка памяти. Интересуют основные правила для их устранения.
На каждый new и malloc нужен delete и free?
Каждый класс нужно удалять (через деструктор).
А что делать с членами класса.
Если у интерфейса есть внутренний интерфейс важна ли их последовательность. Чем больше скажите тем лучше.
Можно пару слов по поводу shared_ptr.
Вопросы про вызов конструктора внутри контейнеров к примеру нового vector или boost::conteiner_ptr
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 22:08     Почему возникает утечка памяти?
Посмотрите здесь:

C++ Утечка памяти
Утечка памяти?! C++
C++ Утечка памяти
Утечка памяти C++
утечка памяти C++
Утечка памяти C++
C++ утечка памяти
Утечка памяти C++
C++ Утечка памяти
Почему происходит утечка памяти? C++
C++ Утечка памяти
Утечка памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.01.2013, 22:55     Почему возникает утечка памяти? #2
Цитата Сообщение от vbloodv Посмотреть сообщение
Возник вопрос почему может возникать утечка памяти.
Выделили память и забыли/не смогли ее освободить.
Цитата Сообщение от vbloodv Посмотреть сообщение
Каждый класс нужно удалять (через деструктор).
Это вопрос? нет, не каждый. только те, где это нужно
Цитата Сообщение от vbloodv Посмотреть сообщение
А что делать с членами класса.
Странный вопрос. А что же тогда писать в деструкторе, если не удаление членов класса?
Цитата Сообщение от vbloodv Посмотреть сообщение
Если у интерфейса есть внутренний интерфейс важна ли их последовательность.
Что вы называете интерфейсом в С++?
Цитата Сообщение от vbloodv Посмотреть сообщение
Можно пару слов по поводу shared_ptr.
Удобная штука. Сама заботиться об удалении объекта
Цитата Сообщение от vbloodv Посмотреть сообщение
Вопросы про вызов конструктора внутри контейнеров
Задавайте ^^
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
17.01.2013, 23:51  [ТС]     Почему возникает утечка памяти? #3
Если элемент в контейнер передается по ссылке например в vector вот таким способом:
vector.pushback(new TypeObject); Как мне его позже освобождать. Хотя вроде бы так нельзя вернее можно но через empace нового стандарта, но точно можно в boost::conteiner_ptr. Какие меня ждут последствия? Чего лучше не делать.
Возможно что при передачи параметру (new Object) лучше делать ::shared_ptr Object или что-то вроде того...
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.01.2013, 00:16     Почему возникает утечка памяти? #4
Если элемент в контейнер передается по ссылке например в vector вот таким способом:
vector.pushback(new TypeObject);
Не ссылка, а указатель. Пройтись по вектору и очистить память. К примеру.

C++
1
std::for_each(v.begin(), v.end(), [](const TypeObject* p) { delete p; });
boost::container_ptr отдельная тема. Нужно смотреть доку и понимать что делаете. Можно сделать, чтобы он был ответственен за удаление элементов, можно нет.

Определенно в контейнерах лучше хранить shared_ptr, нежели сырые указатели.
Yandex
Объявления
18.01.2013, 00:16     Почему возникает утечка памяти?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru