[VC++] как правильно освободить память?
Не парься, процесс умрет и виндофс все за тебя сделает
delete Dlg
---
"Аллах не ведёт людей неверных."
подскажите плиз как правильно освобождать память вот в таком случаеПрежде чем начать программировать на каком-то языке, стоит прочитать какую-нибудь книжку про этот язык. А если ты при этом используешь какую-то технологию, то про неё тоже надо прочитать. Классы окон в MFC могут стираться и автоматически, после уничтожения GUI окна.
При таком подходе могут возникнуть проблемы с тем, что забудешь написать delete или до него управление не дойдет, если перед ним случится исключение. Поэтому часто выделяют память (и вообще, захватывают любой ресурс: открывают файл, например) в конструкторе некоторого локального объекта, а освобождают (закрывают файл) в деструкторе.
Все вышенаписанное относится к С++ вообще.
К вопросу о сборке мусора.Что "К вопросу о сборке мусора."? Опять победило желание выпендриться?
Если за объектами стоят ограниченные системные ресурсы (файлы, сокеты, кистья, перья то их стараются освободить побыстрее. ДАЖЕ в Java.
> то их стараются освободить побыстрее.
Тут семантика блочная, так что можно высвободить и побыстрее, по затиранию старого значения.
---
...Я работаю антинаучным аферистом...
delete Dlg+1
а кохтпа... дым без огня, да
#include <memory>
{
std::auto_ptr<CMyDlg> Dlg(new CMyDlg);
...
}//вот здесь память будет освобождена
//вот здесь память будет освобожденаНе факт, и ты сам это знаешь.
ой а почему не факт?
скопирует ещё в другой автоптр — и всё
а вообще, это ответ из серии "сделает new int[5];" внутри.
так что пока не понял
или замечание "не факт" несет в себе чисто приебистую поднаготную?
Dlg->release;
я уж думал, что совсем ничего не шарю в сях
Если ты считаешь, что auto_ptr::release относится к серии "new int[5]", то "в сях" ты точно не понимаешь ни хуя. Прими мои соболезнования.
расслабь булки
Оставить комментарий
t332
подскажите плиз как правильно освобождать память вот в таком случае:class CMyDlg : CDialog
{
...
};
void MyFunction
{
CMyDlg* Dlg = new CMyDlg;
...
// верно ли так?
Dlg = NULL;
}
И еще вопросик: как вообще в VC++ следить за памятью? Какими функциями или утилитками это можно сделать?