我们都知道抛出异常的指针是不好的:

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编译器,用于检查是否正确使用了异常。

10-05 22:47