BSTR是一个你必须调用的 C 结构SysAllocString体SysFreeString。 _bstr_t是一种 C++ 类型,它为你调用SysAllocString和调用,并且在. 在处理对象时,您不必也不应该调用或调用。SysFreeStringstd::vectorSysAllocStringSysFreeString_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));