VC++のATLを使って、COMを書くときのTips

COMのプログラムをする際に、一番問題になるのが BSTRを使った文字列の処理です*1。一つ扱いを間違えるとすぐにメモリーリークを引き起こす原因にもなるため、細心の注意が必要です。
基本的には、[in] BSTR、[out] BSTR*、と受け取る際には BSTR型で、値を返す際には BSTR*型を使うことになります。その際に以下のクラスを使い、インターフェイス上でBSTRをstd::stringに変換をして、あとはSTLの世界に移ってしまえば気楽になれます。
備忘録代わりにコードを張っておきます。ATLを使用することを前提としているので、CComBSTRをincludeなしに書いてます。

#pragma once

#include <string>

namespace ComStringUtil
{
	inline void StringToBSTR(const std::string& str, BSTR* p_bstr) {
		*p_bstr = CComBSTR(str.c_str()).Detach();
	}
	inline void BSTRToString(const BSTR& bstr, std::string& out_str) {
		out_str = CW2A(bstr);
	}
}

VC++に詳しい方、これじゃまずいよなど問題があればツッコミお願いします。

*1:自分基準で