для глобальных статических переменных:
CFoo* pFoo= NULL;
void DoneFoo()
{
delete pFoo;
}
void Init()
{
pFoo= new CFoo();
atexit(DoneFoo);
}
или
class CFoo
{
......
};
#define NewFoo(F_name) \
CFoo* F_name##Init(); \
void F_name##Done(); \
CFoo* F_name= F_name##Init(); \
CFoo* F_name##Init() { CFoo* F= new CFoo(); atexit(F_name##Done); return F; } \
void F_name##Done() { delete F_name; }
NewFoo(F1);
для статических переменных-членов:
class CFoo
{
static int* pKuku;
static void DoneKuku() { delete pKuku; }
static int* InitKuku() { atexit(DoneKuku); return new int; }
public:
};
int* CFoo::pKuku= CFoo::InitKuku();
Я не думаю, что это хорошая идея, чтобы ОС автоматически освобождала память, потому что у вас будут утечки памяти. Когда у вас есть «законные» утечки памяти - будет труднее заметить «незаконные» утечки, поэтому вы должны стремиться к тому, чтобы вообще не было утечек памяти.