2009-02-17 3 views
0

У меня есть настраиваемый класс исключений. сказать class CustomExcep {};Как очистить память, выделенную для настраиваемого исключения

Мое приложение - это промежуточное программное обеспечение, созданное из C++. Это веб-сервис, который используется для связи между веб-интерфейсом на основе Java и DCE Backend.

всякий раз, когда DCE Backend не работает или не работает из-за некоторых дампов ядра, приложение выдает CustomExcep.

Это как.

CustomExcep * exc = new CustomExcep(); throw exc;

Я не могу использовать память стека для этого, поскольку это приводит к некоторым исключениям во время выполнения.

Мне нужно решение для очистки памяти, используемой этим CustomException. Можем ли мы использовать шаблоны для этой цели?

Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

0

Когда вы поймаете исключение, вам понадобится delete.

0

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

Я бы не рекомендовал создавать исключение в куче вообще.

0

Как упоминал Фредерик, вы, вероятно, должны пойти на решение на основе стека. Если вы беспокоитесь о стоимости (или побочных эффектах) копирования и не беспокоитесь о сбоях в распределении, вы можете выделить память в своем классе исключения и сохранить ее в элементе smart-pointer, тем самым сделав копирование дешевой и свободной процедуры , и ваша память будет выпущена автоматически.

+0

Hi On Freund, Спасибо за совет. Но моя проблема в том, что я не могу использовать стек памяти, поскольку побочные эффекты огромны. заключается в том, что можно каким-либо образом использовать шаблоны для этого, я хочу исключить исключение из класса шаблона. Будет ли это работать. Извините, если мой вопрос звучит глупо, я новичок здесь. – ilan

+0

Не понимаю, почему вы не можете использовать стек стека для класса исключения, и у него есть член, выделенный в куче. Если класс исключения просто содержит (умный) указатель, не должно быть никаких побочных эффектов. –

1

Предварительно выделяйте исключение, используя ключевое слово static.

static const CustomExcep e; 
throw e; 

Реализация Microsoft «VC++» «нового» -оператора использует эту технику. С помощью статического ключевого слова только одно исключение будет создано в течение всего жизненного цикла приложений, а затем повторно использовано в каждом вызове. Таким образом, вам не нужно беспокоиться об удалении.

Существуют дополнительные осложнения при использовании других методов, когда дело доходит до исключений из-за того, как они обрабатываются внутри страны. Как правило, следует избегать новых исключений. Я вернусь и объясню, если у меня будет время.