gpt4 book ai didi

visual-c++ - 是否有一种干净的方法来处理 C++ COM 对象中抛出的 bad_alloc 异常?

转载 作者:行者123 更新时间:2023-12-03 22:43:38 25 4
gpt4 key购买 nike

我正在研究通过 COM 互操作从 C# 客户端调用的各种 C++ COM DirectShow 过滤器。代码中很少使用 C++ 异常。主要的异常是 operator new,它可以抛出 bad_alloc 异常。

是否有一种干净的方式来处理 bad_alloc 异常,这种方式可以被 C# 客户端捕获?

新的处理程序能否抛出一些可能被 COM 互操作客户端捕获的 SEH 异常?

或者在 Visual Studio 库中链接向后兼容的非抛出版本的 new 并检查每个分配是否会更好?

一个乏味的替代方法是为数百个 COM 入口点编写 try/catch,这似乎不值得,因为 bad_alloc 异常很少可恢复。

DirectShow 基类通常会检查来自 operator new 的 null 返回,因为它们似乎是为未引发 bad_alloc 异常的早期版本的 Visual C++ 编写的。

最佳答案

您必须捕获异常并返回 E_OUTOFMEMORY。仅对大型分配执行此操作,当小型分配失败时尝试偶然发现几乎没有意义。程序消耗了 2 GB 的虚拟内存后,就没有什么好事发生了,你还不如让它死掉。由于地址空间碎片,大型分配可能会失败,但仍有大量未使用的空间。

关于visual-c++ - 是否有一种干净的方法来处理 C++ COM 对象中抛出的 bad_alloc 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com