Информация об изменениях

Сообщение Re: локи клинер, странный юзкейс от 26.02.2015 6:14

Изменено 26.02.2015 6:18 VTT

Использовать scope guard для закрытия файлового дескриптора как-то не комильфо, задействуйте RAII.
А вот для удаления файла на выходе из функции scope guard как раз пригодиться.
Если же все-таки использовать scope guard, то в данном случае стоит задействовать два.

ScopeGuard file_remover; // при выходе из области видимости удалит файл

// открываем файл
...
ScopeGuard file_closer; // при выходе из области видимости закроет файл

...
// если преждевременный выход из функции закрыть файл и выйти
file_remover.Dismiss(); // удалять файл не надо
return; // файл будет закрыт, но не удален
...
// обычный выход из функции
return; // файл будет закрыт, затем удален
Re: локи клинер, странный юзкейс
Использовать scope guard для закрытия файлового дескриптора как-то не комильфо, задействуйте RAII.
А вот для удаления файла на выходе из функции scope guard как раз пригодится.
Если же все-таки использовать scope guard, то в данном случае стоит задействовать два.

ScopeGuard file_remover; // при выходе из области видимости удалит файл

// открываем файл
...
ScopeGuard file_closer; // при выходе из области видимости закроет файл

...
// если преждевременный выход из функции закрыть файл и выйти
file_remover.Dismiss(); // удалять файл не надо
return; // файл будет закрыт, но не удален
...
// обычный выход из функции
return; // файл будет закрыт, затем удален