如何清除为Customized Exception分配的内存

时间:2009-02-17 13:03:26

标签: c++ exception memory-leaks

我有一个自定义的异常类。 说类CustomExcep {};

我的应用程序是一个由C ++构成的中间件。它是一个Web服务,用于基于Java的Web前端和DCE后端之间的通信。

当DCE后端由于某些核心转储而未运行或停止时,应用程序将抛出CustomExcep。

就是这样。

CustomExcep * exc = new CustomExcep(); 扔掉;

我无法使用堆栈内存,因为它会导致一些运行时异常。

我需要一个解决方案来清除此CustomException使用的内存。 我们可以为此目的使用模板吗?

任何帮助将不胜感激。在此先感谢。

4 个答案:

答案 0 :(得分:1)

使用static关键字预分配异常。

static const CustomExcep e;
throw e;

微软对“新”操作员的VC ++实现使用了这种技术。 通过使用static关键字,在整个应用程序生命周期中只会创建一个异常,然后在每次调用中重用。这样你就不用担心删除了。

在异常方面使用其他方法还有其他复杂因素,因为它们是如何在内部处理的。通常,应该避免使用新的例外情况。如果我有时间,我会回来再解释一下。

答案 1 :(得分:0)

当你发现异常时,你需要delete它。

答案 2 :(得分:0)

应该能够使用堆栈。如果你不是,那可能是你需要解决的真正问题。

我不建议在堆上创建异常。

答案 3 :(得分:0)

正如弗雷德里克所说,你应该选择基于堆栈的解决方案。如果您担心复制的成本(或副作用)而不担心分配失败,您可以在异常类中分配内存并将其存储在智能指针成员中,从而使复制成本低廉且无副作用的过程,你的记忆会自动释放。