当分配一个空的时BSTR,无论是 bySysAllocString(L"")还是 bySysAllocStringLen(str, 0)你总是会得到一个新的BSTR(至少根据我所做的测试)。BSTR通常不会共享(如 Java/.NET 埋葬),因为它们是可变的,但空字符串,无论出于何种意图和目的,都是不可变的。
我的问题(最后)是为什么 COM 在创建空字符串时不使用总是返回相同字符串的简单优化BSTR(并在 中忽略它SysFreeString)?是否有令人信服的理由不这样做(因为我的推理有缺陷),或者只是因为它被认为不够重要?
我无法谈论 COM 中的惯用法,但在 C++、Java 等中,人们期望如果您是new一个对象,它不会与任何其他对象进行比较(就地址/对象标识而言)。当您使用基于身份的映射(例如,作为IdentityHashMapJava 中的键)时,此属性非常有用。因此,我认为空字符串/对象不应成为此规则的例外。
编写良好的 COM 对象将允许您传递NULL参数BSTR并将其视为等同于空字符串。(不过,这不适用于 MSXML,因为我已经学到了惨痛的教训。:-P)
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |