Куб 0
Общеизвестно, что деструктор объекта, если объект создан путем простого объявления, вызывается автоматически в конце блока. При творческом подходе автоматический вызов деструктора удается приспособить для выполнения специфических задач.
Предположим, в разрабатываемом проекте необходимо измерять время выполнения тех или иных фрагментов кода или целых функций. Удобно подготовить класс 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()
}
//------------------------------------------------------------
Видно, что процедура измерения времени сводится к написанию одной строчки кода. Максимум компактности, согласитесь.

@темы: Лень как двигатель прогресса, Нетривиальный вызов