Это зависит от того, где находится delete
. Если он находится внутри catch
, который перехватывает исключение, он может вызвать.
try {
f(); // throws
} catch( ... ) {
delete p; // will delete
}
Если после catch
перехватывается исключение и catch
не возвращается из функции (т. Е. Позволяет потоку выполнения продолжаться после блока catch
), то может вызываться delete
.
try {
f(); // throws
} catch( ... ) {
// execution proceeds beyond catch
}
delete p; // will delete
Если delete
не находится в блоке catch
или после блока catch
, который позволяет продолжить выполнение, тогда delete
не будет вызывать.
try {
f(); // throws
delete p; // will not delete
} // ...
Как вы можете себе представить, в двух первых случаях выше delete
не будет вызываться, если есть бросок до delete
:
try {
f(); // throws
} catch( ... ) {
g(); // throws
delete p; // will not delete
}