当通过 SysAllocString(L"")
或 SysAllocStringLen(str, 0)
分配一个空的 BSTR
时,您总是会得到一个新的 BSTR
(至少通过我所做的测试)。 BSTR
s 通常不共享(如 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/