Используйте счетчик экземпляров объектов вместо инициализирующих функций
Инициализирующие функции, с очевидным исключением в виде конструкторов Си++, не должны использоваться просто потому, что слишком просто забыть их вызвать. Многие системы с оконным интерфейсом, например, требуют, чтобы вы вызывали функцию инициализации окна перед его созданием (и другую — закрытия — после удаления последнего окна). Это плохая идея. Уладьте эту проблему при помощи счетчика экземпляров, который обычно в Си должен быть глобальной переменной (объявленной статической для ограничения области ее видимости). Сделайте это так:
static int
num_windows = 0; // ограничьте доступ к текущему
//
модулю
create_window()
{
if( ++num_windows == 1 ) // только что создано первое окно
initialize_video_system();
// ...
}
destroy_window()
{
// ...
if( --num_windows == 0 ) // только что уничтожено
shutdown_video_system(); // последнее
окно
}
В Си++ вы можете для этой цели использовать статический член класса.