【发布时间】:2012-06-12 11:33:39
【问题描述】:
在查看一些我偶然发现的代码时:
throw /*-->*/new std::exception ("//...
我一直认为你不需要/不应该在这里使用new。
正确的方法是什么,都可以,如果可以有区别吗?
顺便说一句,我在使用 PowerShell 增强库“grepping”时所看到的从不使用 throw new。
附:我还发现了一些使用 throw gcnew 的 CLI 代码。可以吗?
【问题讨论】:
-
我认为
throw gcnew会很有用,例如。如果您希望托管代码捕获您的异常。有人可以纠正我吗? -
.Net 通过指针处理异常,因此 throw gcnew 是正确的做法。
-
@SebastianRedl .Net “指针”可能不明确?虽然 gcnew 肯定不是。
System::Exception通常是对垃圾收集堆上的托管对象的引用。我总是用gcnew抛出并用System::Exception ^抓住。当然,我在 C++/CLI 中也一直使用finally,尽管在同一个try块中不经常与 C++ 异常混合,我不知道为什么。