Назад к вопросам
Middle
106
questionbank
Что такое отложенная инициализация?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Отложенная инициализация (lazy initialization) — это шаблон проектирования, при котором инициализация объекта, переменной или значения происходит только при первом обращении к нему.
Преимущества:
- Экономия памяти: Объекты создаются только тогда, когда они действительно нужны.
- Ускорение запуска: Инициализация ресурсоемких объектов переносится на более позднее время.
- Обработка циклических зависимостей: Позволяет инициализировать объекты, которые зависят друг от друга.
Недостатки:
- Сложность в многопоточной среде: Требует синхронизации для безопасного доступа.
- Нагрузка при первом доступе: Первое обращение может быть медленнее из-за инициализации.
Пример в C++:
#include <iostream>
#include <memory>
class Resource {
public:
Resource() {
std::cout << "Resource created!" << std::endl;
}
void do_work() {
std::cout << "Resource is working." << std::endl;
}
};
class MyObject {
public:
// Метод для ленивой инициализации ресурса
Resource* get_resource() {
if (!resource_) {
resource_ = std::make_unique<Resource>(); // Инициализация происходит здесь
}
return resource_.get();
}
private:
std::unique_ptr<Resource> resource_; // Ресурс изначально не создан
};
int main() {
MyObject obj;
std::cout << "Object created, resource not yet." << std::endl;
obj.get_resource()->do_work(); // Первое обращение к ресурсу, происходит его инициализация
return 0;
}