Правила программирования на С и С++. Главы 7-8 - Используйте счетчики экземпляров объектов для инициализации на уровне класса

ОГЛАВЛЕНИЕ

 

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();

}}