ScopeGuard использует действительно вывод для лучше кодирования?

Использовать --auto-open-devtools-for-tabs:

Этот флаг открывает окно автоматического открытия Chrome DevTools для каждой вкладки. Он предназначен для использования разработчиками и автоматизации, чтобы не требовать взаимодействия с пользователем для открытия DevTools.

blockquote>

Источник

32
задан Lazer 27 June 2010 в 09:06
поделиться

4 ответа

Это определенно улучшает Ваш код. Ваше предварительно сформулированное требование, что это неясно и тот код, заслужило бы от catch, блок просто не верен в C++, потому что RAII является установленной идиомой. Обработка ресурса в C++ сделана приобретением ресурса, и сборка "мусора" сделана неявными вызовами деструктора.

, С другой стороны, явный catch блоки чрезмерно увеличили бы размер кода и представили бы тонкие ошибки, потому что поток кода становится намного более сложным, и обработка ресурса должна быть сделана явно.

RAII (включая ScopeGuard с не является неясной техникой в C++, но твердо установленной лучшей практике.

61
ответ дан 27 November 2019 в 19:59
поделиться

Да.

, Если существует одна единственная часть кода C++, который я мог рекомендовать, каждый программист на C++ проводит 10 минут, учась, это - ScopeGuard (теперь часть в свободном доступе библиотека Loki ).

я решил попытаться использовать (немного измененный) версия ScopeGuard для небольшого Win32 программа GUI, я продолжал работать. Win32, как можно знать, имеет много различных типов ресурсов, которые должны быть закрыты по-разному (например, дескрипторы ядра обычно закрываются с CloseHandle(), GDI BeginPaint() должен быть соединен с EndPaint(), и т.д.), я использовал ScopeGuard со всеми этими ресурсами, и также для выделения рабочих буферов с new (например, для преобразований набора символов в Unicode).

то, Что поразило меня, было то, каким количеством короче была программа. В основном, это - взаимовыгодное: Ваш код становится короче и более устойчивым одновременно. Будущие изменения кода ничего не могут пропустить . Они просто не могут. Насколько прохладный это?

29
ответ дан 27 November 2019 в 19:59
поделиться

Я не использовал этот конкретный шаблон, но я использовал что-то подобное прежде. Да, это действительно приводит к более четкому коду по сравнению с одинаково устойчивым кодом, реализованным по-разному.

1
ответ дан 27 November 2019 в 19:59
поделиться

Я часто использую его для защиты использования памяти, вещи, которые должны быть освобождены, которые были возвращены из ОС. Например:

DATA_BLOB blobIn, blobOut;
blobIn.pbData=const_cast<BYTE*>(data);
blobIn.cbData=length;

CryptUnprotectData(&blobIn, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &blobOut);
Guard guardBlob=guardFn(::LocalFree, blobOut.pbData);
// do stuff with blobOut.pbData
2
ответ дан 27 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: