MrNexeon
@MrNexeon

Что подразумевается под получением ресурса и его инициализации в RAII?

Въехал в идиому RAII, но никак не вникну в эти слова "Получение ресурса есть инициализация".

Буду благодарен, если кто-то на примерах покажет, что является получением, а что самим ресурсом? А также как выглядит его "инициализация"? Эдак сказать - пошагово.
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
RAII это оборачивание в класс некоторой "сырой" сущности. Сущность может быть любая, но с ней неудобно работать, потому что надо следить за созданием и уничтожением в программе. Например

class WinAPI32_Window
{
HWND hWnd = 0; // <--ресурс
public:
  WinAPI32_Window()
  {
    //100 строк для регистрации класса окна и создания окна
    hWnd = CreateWindow(/* много параметров */); // <--получаем ресурс

    if (!hWnd) throw std::system_error("win creation error"); // кидаем исключение в конструкторе, если окно не создается, то объект не создается тоже 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
  }

  ~WinAPI32_Window()
  {
    DestroyWindow(hWnd);  // <-- освобождение ресурса
  }
}

//ну а дальше в программе:
try {
  auto win = new WinAPI32_Window; //создаем объект = инициализируем и получаем внутри hWnd
} catch //...
//работаем
delete win; //освобождаем ресурс путем удаления объекта
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы