Иногда может быть удобно проверять удаление экземпляров классов вот таким некрасивым но простым способом:
#define INST_CNT(name) \
class INST_COUNTER { \
struct STAT { \
int m_cnt; \
STAT(): m_cnt(0) {} \
~STAT() { \
if (!m_cnt) ::OutputDebugString(#name " is Ok\n"); \
else { \
::MessageBeep(-1); \
AtlTrace(#name " instance count is %i !\n", m_cnt); \
} \
} \
}; \
void Action(bool ctor) { \
static STAT stat; \
if (ctor) stat.m_cnt++; \
else stat.m_cnt--; \
} \
public: \
INST_COUNTER() {Action(true);} \
~INST_COUNTER() {Action(false);} \
} m_instance_counter;
Юзать следующим образом:
class CMustBeTested {
...
INST_CNT(CMustBeTested)
...
};
AtlTrace можно заменить чем нибудь по вкусу.
Entry point должна быть (Win)mainCRTStartup из-за статического объекта с нетривиальным деструктором.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн