BSTR
是一个你必须调用的 C 结构SysAllocString
体SysFreeString
。 _bstr_t
是一种 C++ 类型,它为你调用SysAllocString
和调用,并且在. 在处理对象时,您不必也不应该调用或调用。SysFreeString
std::vector
SysAllocString
SysFreeString
_bstr_t
如果您正在处理 C 结构BSTR
对象:
(1) 您可以安全地将智能指针存储在容器中,除了auto_ptr
,它只是假装是智能的。
(2) Avector
可以存储_bstr_t
,但它不理解SysFreeString
,你将不得不手动调用它。就像您必须delete
使用原始指针一样,因为_bstr_t
它不是智能指针。
(3) astd::unique_ptr<BSTR, HRESULT (*)(BSTR)>(mybstr, SysFreeAlloc)
是一个智能指针,它可以安全而神奇地为你做所有事情,包括完全安全地存储在向量中,没有开销。但是,这很难写,所以大多数人使用:
template<class T, class F>
std::unique_ptr<T, F> make_unique(T t, F f)
{return std::unique_ptr<T,F>(std::move(t), std::move(f));}
typedef decltype(make_unique(declval<BSTR>(), SysFreeAlloc)) bstr_ptr;
std::vector<bstr_ptr> container;
container.push_back(make_unique(mybstr, SysFreeAlloc));