Почти, но не совсем. Вы поймаете исключение с
try
{
...
}
catch (Exception e)
{
...
}
но у вас все еще будут потенциальные проблемы. Согласно MSDN , чтобы гарантировать исключение, вызываются деструкторы, вам нужно поймать как:
try
{
...
}
catch
{
...
}
Это единственный способ гарантировать, что вызывается деструктор исключения (хотя я не уверен почему). Но это оставляет вас в обмене грубой силой на возможную утечку памяти.
Кстати, если вы используете подход (Exception e), вы должны знать различные типы исключений, с которыми вы можете столкнуться. RuntimeWrappedException - это то, что будет сопоставлено любому управляемому типу не-исключения (для языков, которые могут выдавать строку), а также будут сопоставлены другие типы, такие как OutOfMemoryException и AccessViolationException. COM-взаимодействие HRESULTS или исключения, отличные от E___FAIL, будут сопоставлены с COMException, и, наконец, в конце у вас будет SEHException для E_FAIL или любого другого неотображенного исключения.
Так что же вам делать? Лучший выбор - не выбрасывать исключения из вашего неуправляемого кода! Хах. Правда, если у вас есть выбор, поставьте барьеры и провалы, которые делают выбор хуже, шанс утечки памяти во время обработки исключений или незнание типа вашего исключения.