Правила программирования на С и С++. Главы 7-8 Страница 46. Используйте счетчики экземпляров объектов для инициализации на уровне класса
|
Страница 46 из 74 133. Используйте счетчики экземпляров объектов для инициализации на уровне класса.
Несколько разделов назад я рассматривал использование счетчика статических глобальных объектов для управления инициализациями на уровне библиотеки. В С++ у нас есть лучшие варианты, потому что мы может использовать определение класса для ограничения области действия: class window { static int num_windows;public: window(); ~window(); }; int window::num_windows = 0; window::window() { if( ++num_windows == 1 ) // только что создано первое окно initialize_video_system();} window::~window() { if( --num_windows == 0 ) // только что уничтожено последнее окно shut_down_video_system(); }Наконец, счетчик экземпляров объектов может быть также использован в качестве счетчика числа вызовов для обеспечения инициализации на уровне подпрограммы: f() { static int have_been_called = 0; if( !have_been_called ) { have_been_called = 1; do_one_time_initializations(); }} |