auto delete null ptr
От: Аноним  
Дата: 09.01.12 00:04
Оценка:
условия задачи

есть некая структура(класс) списков

class Singl
{
     Singl *Next;
     static Singl *This;

     ~Singl() { if (Next) delete Next; };

     static Singl *Init()
     {
              //.... инициалицация This,Next... итд
     };

};

Singl *Singl::This = 0;



1) после завершения программы нужно сделать if (Singl::This) delete Singl::This;
для автоматического очистки списка

недолго думая набросал класс дестроер указателя

template <typename T>
class auto_delete_ptr
{
     T **ptr;
 public:
     auto_delete_ptr(T **p) { ptr = p;};
     ~auto_delete_ptr() { if (*ptr) delete *ptr; };
};


и далее в .cpp модуле
static auto_delete_ptr autoDel(&Singl::This);

есть ли другие более стандартные варианты?
Re: auto delete null ptr
От: Ops Россия  
Дата: 09.01.12 01:11
Оценка:
http://www.cplusplus.com/reference/clibrary/cstdlib/atexit/
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: auto delete null ptr
От: Caracrist https://1pwd.org/
Дата: 09.01.12 05:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>условия задачи


А>есть некая структура(класс) списков


А>
А>class Singl
А>{
А>     Singl *Next;
А>     static Singl *This;

А>     ~Singl() { if (Next) delete Next; };

А>     static Singl *Init()
А>     {
А>              //.... инициалицация This,Next... итд
А>     };

А>};

А>Singl *Singl::This = 0;
А>



А>1) после завершения программы нужно сделать if (Singl::This) delete Singl::This;

А> для автоматического очистки списка

А>недолго думая набросал класс дестроер указателя


А>
А>template <typename T>
А>class auto_delete_ptr
А>{
А>     T **ptr;
А> public:
А>     auto_delete_ptr(T **p) { ptr = p;};
А>     ~auto_delete_ptr() { if (*ptr) delete *ptr; };
А>};
А>


А>и далее в .cpp модуле

А> static auto_delete_ptr autoDel(&Singl::This);

А>есть ли другие более стандартные варианты?


std::auto_ptr<T> Singl::This; ...

~~~~~
~lol~~
~~~ Single Password Solution
Re: auto delete null ptr
От: collider  
Дата: 09.01.12 19:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>условия задачи


А>есть некая структура(класс) списков


А>
А>class Singl
А>{
А>     Singl *Next;
А>     static Singl *This;

А>     ~Singl() { if (Next) delete Next; };

А>     static Singl *Init()
А>     {
А>              //.... инициалицация This,Next... итд
А>     };

А>};

А>Singl *Singl::This = 0;
А>



А>1) после завершения программы нужно сделать if (Singl::This) delete Singl::This;

А> для автоматического очистки списка

А>недолго думая набросал класс дестроер указателя


А>
А>template <typename T>
А>class auto_delete_ptr
А>{
А>     T **ptr;
А> public:
А>     auto_delete_ptr(T **p) { ptr = p;};
А>     ~auto_delete_ptr() { if (*ptr) delete *ptr; };
А>};
А>


А>и далее в .cpp модуле

А> static auto_delete_ptr autoDel(&Singl::This);

А>есть ли другие более стандартные варианты?


Singl *Singl::This=InitThis();

static Singl *InitThis()
{
static Singl _This;
return &_This;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.