понедельник, 03 марта 2008

Общеизвестно, что деструктор объекта, если объект создан путем простого объявления, вызывается автоматически в конце блока. При творческом подходе автоматический вызов деструктора удается приспособить для выполнения специфических задач.
Предположим, в разрабатываемом проекте необходимо измерять время выполнения тех или иных фрагментов кода или целых функций. Удобно подготовить класс
TimeMeasure, не содержащий методов, а только лишь конструктор и деструктор. В конструкторе засекается время создания объекта TimeMeasure, в деструкторе вычисляется разность времен между выполнением деструктора и конструктора и выводится, например, на экран.
Читать дальше... //------------------------------------------------------------ #include <windows.h> #include <stdio.h> class TimeMeasure { public: TimeMeasure(const char *Comment="") { ::printf("%s (", Comment); m_Time=::GetTickCount(); } virtual ~TimeMeasure() { m_Time=::GetTickCount()-m_Time; ::printf("%i msecs)\n", static_cast<int>(m_Time)); } private: long long m_Time; }; // измерим время выполнения функции main() int main() { TimeMeasure T; // здесь вызывается конструктор TimeMeasure() return 0; // здесь автоматически вызывается деструктор ~TimeMeasure() } //------------------------------------------------------------
|
Видно, что процедура измерения времени сводится к написанию одной строчки кода. Максимум компактности, согласитесь.
@темы:
Нетривиальный вызов,
Лень как двигатель прогресса