Система Orphus

 

Поиск по сайту

 

Статьи » Отложенная инициализация (lazy initialization) в C++

Отложенная инициализация в C++

Создание объектов в системе может представлять ресурсоемкую операцию. Например, для построения объекта необходимо выполнить сложные вычислительные задачи или обработать большой поток данных из базы данных.

В то же время, производить такие операции заранее часто совершенно необязательно.  Рассмотрим программу банковской платежной системы. При входе пользователя в программу нет нужды рассчитывать данные "История совершенных операций". Эти данные будут нужны только при нажатии пользователем кнопки "Показать историю".

Отложенная инициализация (lazy initialization, ленивая инициализация) представляет собой механизм инициализации объекта (через вызов соответствующего конструктора) по требованию клиента. Создание объекта откладывается до того момента, когда это действительно необходимо.

Рассмотрим следующий пример, демонстрирующий этот механизм.

#include <iostream>
 
History & getHistory()
{
    static History instance;
    return instance;
} 

При первом вызове getHistory() для инициализации статического объекта instance будет вызван конструктор класса History, а по завершении программы - его деструктор. Если же эта функция не используется, то объект не создается вообще. Таким образом, инициализация объекта откладывается до первого вызова функции getHistory().

Подведем итоги. Основное назначение отложенной инициализации -отложить создание ресурсоемких объектов до того момента, когда это действительно необходимо.