D Language
Защитные очки
Поиск…
Синтаксис
- scope (exit) - выписки вызываются независимо от того, как был выведен текущий блок
- scope (success) - выписки вызываются, когда текущий блок обычно завершается
- scope (failure) - выписки вызываются, когда текущий блок выходил из-за исключения
замечания
Использование защитных ограждений делает код намного чище и позволяет размещать ресурсы и очищать код рядом друг с другом. Эти маленькие помощники также улучшают безопасность, потому что они обеспечивают, чтобы определенный код очистки всегда назывался независимо от того, какие пути фактически выполняются во время выполнения.
Функция области D эффективно заменяет идиому RAII, используемую на C ++, что часто приводит к особым объектам защиты объектов для специальных ресурсов.
Охранные зоны вызываются в порядке, указанном в обратном порядке.
Место размещения и код очистки рядом друг с другом
Защитные ограждения позволяют выполнять инструкции при определенных условиях, если текущий блок оставлен.
import core.stdc.stdlib;
void main() {
int* p = cast(int*)malloc(int.sizeof);
scope(exit) free(p);
}
Множественные, вложенные области
import std.stdio;
void main() {
writeln("<html>");
scope(exit) writeln("</html>");
{
writeln("\t<head>");
scope(exit) writeln("\t</head>");
"\t\t<title>%s</title>".writefln("Hello");
} // the scope(exit) on the previous line is executed here
writeln("\t<body>");
scope(exit) writeln("\t</body>");
writeln("\t\t<h1>Hello World!</h1>");
}
печать
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow