com - 为什么 COM 不使用静态的空 BSTR?

标签 com bstr string

当通过 SysAllocString(L"")SysAllocStringLen(str, 0) 分配一个空的 BSTR 时,您总是会得到一个新的 BSTR (至少通过我所做的测试)。 BSTRs 通常不共享(如 Java/.NET interment),因为它们是可变的,但空字符串对于所有意图和目的来说都是不可变的。

我的问题(终于)是为什么 COM 不使用在创建空 BSTR 时总是返回相同字符串的琐碎优化(并在 SysFreeString 中忽略它>)?是否有令人信服的理由不这样做(因为我的推理有缺陷)或者只是因为它被认为不够重要?

最佳答案

我不能谈论 COM 中的惯用语,但在 C++、Java 等中,如果您 new 一个对象,它不会比较相等(就地址而言)/object 身份)到任何其他对象。当您使用基于身份的映射时,此属性很有用,例如,作为 Java 中 IdentityHashMap 中的键。出于这个原因,我认为空字符串/对象不应该是这条规则的异常(exception)。

编写良好的 COM 对象将允许您将 NULL 传递给 BSTR 参数并将其视为等效于空字符串。 (不过,这不适用于 MSXML,因为我学到了很多东西。:-P)

关于com - 为什么 COM 不使用静态的空 BSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1821906/

相关文章:

python - python中两个具有相同值的不同字符串对象

c++ MFC compile error "C2470: ' CMySink' : looks like a function definition, but there is no parameter list;跳过明显的 body ”

c++ - 如何转发声明 _com_ptr_t 指针?

c++ - 为什么编译器要使用临时变量?

c++ - 用于检测将 wchar_t* 传递给 BSTR 的静态代码分析

regex - Notepad++ 上的正则表达式两个单词在同一行

.net - 为暴露给 COM 的 .NET 类定义接口(interface)有什么好处?

c# - 在 WinForms 线程上使用 CoInitializeEx

c++ - 无法在 VARIANT 结构中获取 BSTR 数据的确切位置

c - 重新分配 char 数组中的字符