Использование лямбд для очистки
От: GhostCoders Россия  
Дата: 03.02.17 07:57
Оценка:
Добрый день!

Думаю, что следующий подход в корне неверен:

void function1(std::shared_ptr<Image> image, std::shared_ptr<ColorData> color_data)
{
    auto deleter = [image, color_data]() {image->Clear(); color_data->Clear(); };
    
    // ...
    try
    {
        some_function2();
    }
    catch (...)
    {
        deleter();
        throw some_exception("Error text...");
    }

    // ...
    int error_state = some_function3();
    if (!error_state)
    {
        deleter();
        throw some_exception("Error text...");
    }
    // ...
}


Фактически здесь лямбда с захватом контекста используется как макрос, то есть когда по-старинке писали вручную очистку ресурсов (до RAII-эпохи), так делать не нужно.
Третий Рим должен пасть!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.