Scope guards

Scope guards дозволяють виконувати певні інструкції за умови, що поточний блок завершився:

  • scope(exit) завжди будуть викликатись інструкції
  • інструкції scope(success) викликаються, якщо не було жодних винятків
  • scope(failure) позначає інструкції, які викликаються за умови винятку (помилки), зробленого до завершення блоку

Використання scope guards робить код набагато чистішим і дозволяє розміщувати код для виділення та очищення пам'яті поруч. Ці маленькі помічники також покращують безпеку, тому що дають гарантію, що певний код для очищення буде завжди викликатися незалежно від того, що сталося під час виконання.

Зміст (scope) мови D ефективно замінює ідіому RAII, що використовується у мові C++, яка часто веде до спеціальних об’єктів scope guards для конкретних ресурсів.

Scope guards викликаються у зворотному від зазначеного порядку.

Поглиблення

rdmd playground.d