Использовать --auto-open-devtools-for-tabs
:
Этот флаг открывает окно автоматического открытия Chrome DevTools для каждой вкладки. Он предназначен для использования разработчиками и автоматизации, чтобы не требовать взаимодействия с пользователем для открытия DevTools.
blockquote>
Это определенно улучшает Ваш код. Ваше предварительно сформулированное требование, что это неясно и тот код, заслужило бы от catch
, блок просто не верен в C++, потому что RAII является установленной идиомой. Обработка ресурса в C++ сделана приобретением ресурса, и сборка "мусора" сделана неявными вызовами деструктора.
, С другой стороны, явный catch
блоки чрезмерно увеличили бы размер кода и представили бы тонкие ошибки, потому что поток кода становится намного более сложным, и обработка ресурса должна быть сделана явно.
RAII (включая ScopeGuard
с не является неясной техникой в C++, но твердо установленной лучшей практике.
Да.
, Если существует одна единственная часть кода C++, который я мог рекомендовать, каждый программист на C++ проводит 10 минут, учась, это - ScopeGuard (теперь часть в свободном доступе библиотека Loki ).
я решил попытаться использовать (немного измененный) версия ScopeGuard для небольшого Win32 программа GUI, я продолжал работать. Win32, как можно знать, имеет много различных типов ресурсов, которые должны быть закрыты по-разному (например, дескрипторы ядра обычно закрываются с CloseHandle()
, GDI BeginPaint()
должен быть соединен с EndPaint()
, и т.д.), я использовал ScopeGuard со всеми этими ресурсами, и также для выделения рабочих буферов с new
(например, для преобразований набора символов в Unicode).
то, Что поразило меня, было то, каким количеством короче была программа. В основном, это - взаимовыгодное: Ваш код становится короче и более устойчивым одновременно. Будущие изменения кода ничего не могут пропустить . Они просто не могут. Насколько прохладный это?
Я не использовал этот конкретный шаблон, но я использовал что-то подобное прежде. Да, это действительно приводит к более четкому коду по сравнению с одинаково устойчивым кодом, реализованным по-разному.
Я часто использую его для защиты использования памяти, вещи, которые должны быть освобождены, которые были возвращены из ОС. Например:
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