假设COM接口的方法返回BSTR值。我认为我必须释放它吗?
http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx的代码示例不会这样做。
谁错了?
答案 0 :(得分:11)
MSDN示例错误。呼叫者释放和进出bstrs。如果它是in / out你必须传入null或有效的bstr。如果它只是外出,则不必初始化。
从msdn的com allocation rules开始并不是很清楚,但是客户端存根在out值上分配内存,所以从调用者的角度来看服务器做了。除了呼叫者,还有谁可以释放它?
答案 1 :(得分:9)
托尼是正确的,但我想扩大他的答案。这种情况不仅限于BSTR。调用者负责释放通过out或in / out参数返回的任何内存。