我们都知道抛出异常的指针是不好的:
try
{
...
throw new MyExceptionClass();
}
catch (MyExceptionClass* e)
{
...
}
您用什么方法清理遗留代码中的捕获目标?我认为可以通过将
operator new
设为私有(private)来修复第一部分:class MyExceptionClass
{
public:
...
private:
void* operator new(size_t);
}
在编译时如何使事物的捕获方面同样难看?我不想仅仅使它陷入
catch (...)
Realm 。 最佳答案
如果我对您的理解正确,则希望将不良做法变成编译错误。
通过将异常类型设置为非堆可分配的,您已设法将此设置为非法:
throw new MyExceptionClass();
las,下一部分不能像您想要的那样完成。没有任何方法可以使捕获块非法。虽然,如果将MyExceptionClass进行堆分配是非法的,则无需担心catch块。只会浪费空间。
如果要强制执行不被指针捕获的操作,则需要一个类似 Lint 的工具。
我建议看EDoC++。它是经过修改的gcc编译器,用于检查是否正确使用了异常。