我们都知道抛出异常指针是不好的:
try
{
...
throw new MyExceptionClass();
}
catch (MyExceptionClass* e)
{
...
}
您在遗留代码中清理捕获目标的方法是什么?我认为我可以通过将 operator new
设为私有(private)来修复第一部分:
class MyExceptionClass
{
public:
...
private:
void* operator new(size_t);
}
如何在编译时使捕获部分变得同样丑陋?我不想让它陷入 catch (...)
领域。
最佳答案
除了静态分析工具或代码审查之外,您无法采取任何措施来防止指针捕获。但是,如果您几乎不可能抛出 MyExceptionClass
指针,则 catch(MyExceptionClass*)
block 将成为死代码。
为了更彻底地防止指针抛出异常,您实际上需要做更多的工作。
隐藏所有形式的运算符 new -- 请参阅here 。
隐藏地址运算符 -- 抛出先前分配的对象的地址会带来一些与抛出堆分配的对象相同的问题。
class MyExceptionClass
{
private:
MyExceptionClass* operator&();
}
关于c++ - 异常指针清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/971668/