Правила программирования на С и С++. Главы 7-8 - Используйте счетчики экземпляров объектов для инициализации на уровне класса
ОГЛАВЛЕНИЕ
Страница 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();
}}