Как очистить память, выделенную для Customized Exception - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть настроенный класс исключений. скажем класс CustomExcep {};

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

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

Это так.

CustomExcep * exc = new CustomExcep (); бросить отл;

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

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

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

Ответы [ 4 ]

1 голос
/ 15 января 2010

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

static const CustomExcep e;
throw e;

В Microsoft VC ++ реализация "нового" -оператора использует эту технику. При использовании ключевого слова static в течение всего времени жизни приложения будет создано только одно исключение, которое затем будет использоваться при каждом вызове. Таким образом, вам не нужно беспокоиться об удалении.

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

0 голосов
/ 17 февраля 2009

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

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

0 голосов
/ 17 февраля 2009

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

0 голосов
/ 17 февраля 2009

Когда вы ловите исключение, вам нужно delete оно.

...