Подсчет кол-ва экземпляров в VC++
От: Диагностик Россия  
Дата: 13.03.03 03:28
Оценка:
Иногда может быть удобно проверять удаление экземпляров классов вот таким некрасивым но простым способом:
#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 из-за статического объекта с нетривиальным деструктором.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.