-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


goto vs break & continue

Вторник, 21 Июля 2020 г. 03:11 + в цитатник
D_KEY:
Цитата JoeUser @
После выхода из процедуры отдельные ресурсы должны оставаться валидными. Но, если не вся цепочка пройдена - вот тогда все ресурсы, захваченные до ошибки, должны быть освобождены.

Это решается путём передачи владения ресурсом полю или передачи его(владения) наружу.

Добавлено
Цитата JoeUser @
В данном случае никаких противоречий не вижу. Класс изначально проектировался для соблюдения состояний:

1) Ожидает
2) В состоянии соединения
3) В состоянии ошибки
4) В состоянии передачи

Причем возможные переходы между состояниями заранее предопределены. В этом случае инвариантность не нарушается.

Допустим. ИМХО, тогда лучше воспользоваться паттерном state и управление ресурсами в этом случае будет примерно такое, как я описал. Но дело твое. В методе load в случае успеха передать владение от локального объекта полю все равно никто не мешает. Если не понятно, то могу код привести чуть позже.

Добавлено
https://godbolt.org/z/zbhGr5

    #include
    #include
    struct my_initializer {
    my_initializer()
    {
    std::cout << "init" << std::endl;
    }
    ~my_initializer()
    {
    std::cout << "deinit" << std::endl;
    }
    };
    struct my_struct {
    void load()
    {
    auto init = std::make_unique();
    // ...
    bool success = true;
    // ...
    if (success) {
    init_.swap(init);
    }
    }
    private:
    std::unique_ptr init_;
    };
    int main()
    {
    my_struct a;
    {
    std::cout << "enter" << std::endl;
    a.load();
    std::cout << "exit" << std::endl;
    }
    }


Поигравшись с переменной success сможешь понять, в чем суть.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834767

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку