【发布时间】:2015-11-13 12:53:51
【问题描述】:
我的 COM 实现类将参数作为 BSTR(和 VARIANT*)并在内部传递。通常我们将它们转换为std::string 或std::wstring,但有时它们会被绕过并被发送回另一个 COM 调用。
在这些情况下,是传递原始 COM 类型更好,还是将它们包装在帮助程序类中,如 _bstr_t 和 _variant_t?
【问题讨论】:
-
_bstr_t 和 _variant_t 用于管理分配给 BSTR 和 VARIANT 的资源。通常,通过将 BSTR(可能引用系统资源)包装在自动变量 _bstr_t 中,您可以通过避免释放资源的需要来使代码更清晰,因为 _bstr_t 析构函数会在超出范围时为您执行此操作。所以问题不在于它是否被传递给另一个 COM 调用,而在于你是否对资源负责。
-
详细说明,您收到的任何纯
in参数的BSTR 纯粹是调用者的责任。您可以将它们包装在 _bstr_t 中(这将创建它们的副本),但这感觉没有必要。不过,我想,变体是一个更复杂的问题。