2013-02-27 2 views
0

при написании кода на C++ я получил точку, где определенной структуре нужен вызов функции end(), чтобы гарантировать, что уничтожение не выбрасывает никаких исключений.гарантирует, что некоторая функция вызывается перед уничтожением

Foo a(x,y)

~a -> может бросить в некоторых очень плохих условиях

Foo a(x,y)

a.end() -> возможно бросает

~a gurantees не сгенерирует исключение

Интересно, если есть e лигантный способ заставить это ограничение (конец должен быть вызван до деконструкции) компилятором или хотя бы распечатать предупреждение?

Поздравления и благодарности

+5

деструктор никогда не должен вызывать исключения ... – ForEveR

+0

, но разве обертка не переместит проблему? Деструктор обертки вызовет конец, но конец может бросить, поэтому та же проблема. Я мог бы использовать try catch, но это не очень элегантно, на мой взгляд –

+0

вопрос в том, кто будет обрабатывать это исключение? Если кто-то позвонит, позвольте ему позвонить. – kassak

ответ

4

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

Но вы должны уловить любые исключения, и not let them leak from the destructor.

+0

Да, я знаю, я просто надеялся на более элегантное решение, о котором я еще не знал, ну, к счастью, для меня я думаю ;-). Thx в любом случае –

+1

@ChristopherSchildt: Это кажется самым элегантным решением; что может быть более элегантным, чем подход, который автоматически вызывает предпосылки в правильное время? –

+0

ну, мне не нравится идея попробовать поймать в деструкторе, это может быть несколько субъективно, но его просто выглядит неудобно для меня. –

Смежные вопросы