[VC++] как правильно освободить память?

t332

подскажите плиз как правильно освобождать память вот в таком случае:
class CMyDlg : CDialog
{
...
};
void MyFunction
{
CMyDlg* Dlg = new CMyDlg;
...
// верно ли так?
Dlg = NULL;
}
И еще вопросик: как вообще в VC++ следить за памятью? Какими функциями или утилитками это можно сделать?

okunek

Не парься, процесс умрет и виндофс все за тебя сделает

Sanjaz

delete Dlg

Ivan8209

К вопросу о сборке мусора.
---
"Аллах не ведёт людей неверных."

kokoc88

подскажите плиз как правильно освобождать память вот в таком случае
Прежде чем начать программировать на каком-то языке, стоит прочитать какую-нибудь книжку про этот язык. А если ты при этом используешь какую-то технологию, то про неё тоже надо прочитать. Классы окон в MFC могут стираться и автоматически, после уничтожения GUI окна.

Realist

В С++ нет встроенной автоматической сборки мусора. Всякую выделенную руками память нужно руками же освобождать. На каждый new по delete.
При таком подходе могут возникнуть проблемы с тем, что забудешь написать delete или до него управление не дойдет, если перед ним случится исключение. Поэтому часто выделяют память (и вообще, захватывают любой ресурс: открывают файл, например) в конструкторе некоторого локального объекта, а освобождают (закрывают файл) в деструкторе.
Все вышенаписанное относится к С++ вообще.

enochka1145

К вопросу о сборке мусора.
Что "К вопросу о сборке мусора."? Опять победило желание выпендриться?
Если за объектами стоят ограниченные системные ресурсы (файлы, сокеты, кистья, перья то их стараются освободить побыстрее. ДАЖЕ в Java.

Ivan8209

> Если за объектами стоят ограниченные системные ресурсы (файлы, сокеты, кистья, перья
> то их стараются освободить побыстрее.
Тут семантика блочная, так что можно высвободить и побыстрее, по затиранию старого значения.
---
...Я работаю антинаучным аферистом...

margadon

 
delete Dlg
+1
а кохтпа... дым без огня, да

ksu011

можно так:
#include <memory>
{
std::auto_ptr<CMyDlg> Dlg(new CMyDlg);
...
}//вот здесь память будет освобождена

evgen5555

//вот здесь память будет освобождена
Не факт, и ты сам это знаешь.

Maurog

ой а почему не факт?

Werdna

скопирует ещё в другой автоптр — и всё

Maurog

но ведь память будет освобождена ;=)
а вообще, это ответ из серии "сделает new int[5];" внутри.
так что пока не понял
или замечание "не факт" несет в себе чисто приебистую поднаготную?

evgen5555

Dlg->release;

Maurog

точно приебался
я уж думал, что совсем ничего не шарю в сях

evgen5555

Если ты считаешь, что auto_ptr::release относится к серии "new int[5]", то "в сях" ты точно не понимаешь ни хуя. Прими мои соболезнования.

Maurog

уже и ко мне приебался
расслабь булки
Оставить комментарий
Имя или ник:
Комментарий: