Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#include <Core/Core.h>
class window
{
public:
window() :parent(NULL) {}
window(window *p) :parent(p) {}
window * create_window()
{
return & windows.Add();
}
bool delete_window (window *w)
{
for (int i=0; i<windows.GetCount(); ++i)
if (&windows[i] == w)
{
windows.Remove(i);
return true;
}
return false;
}
void destroy()
{
windows.Clear();
}
private:
window *parent;
Array<window> windows; //контейнер с авто-очисткой
};
int _tmain(int argc, _TCHAR* argv[])
{
window root;
root.create_window();
root.create_window();
root.destroy();
//в этом случае мало что изменит, потому что окна
//внутри контейнера всё равно будут удалены в
//деструкторе root::windows
//в этом случае root был и остался абсолютно валидным
}
Если данные будем хранить в контейнере с авто-удалением (см. статью), то память не утечётЕсли нить завершилась, а этот кусок данных остался занимать своё место в памяти — это немногим лучше обычного memory leak. Обработал сервер 100 запросов, съел ещё 100*N мегабайт. Потом ещё 100 запросов обработал…, а потом ОС его убьёт.
в обёртке вроде smart_ptr (не shared_ptr!).Хм… smart_ptr — это общее название всех таких указателей, shared_ptr — это тоже один из smart_ptr'ов. Я не совсем понял, что имелось в виду.
10 лет практики. Часть 2: ресурсы