potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

C++&Win API _bstr_tとwil::make_bstr

Windows環境でLPWSTRからスマートポインタ的なBSTRを作成する方法には次の2通りあります。

  1. _bstr_t(...) <comutil.h>
  2. wil::make_bstr(...) "wil/com.h"

前者の_bstr_t(...)コンパイラ付属なので追加インストールが不要ですが、ムーブセマンティクス非対応で独自の参照カウンタを使用しています。作成する度に参照カウント管理用にクラスがnewされます。また、LPWSTR/LPSTR等からの作成に対応しています。

後者のwil::make_bstr(...)Microsoftのパッケージですが追加インストールが必要です。ムーブセマンティクス対応でメモリ消費は少ないですが、コピー時は新しいBSTRが作成されます。LPWSTRからの作成しか対応しません。 各種エラーパターン(エラーコード、フェイルファスト、例外)に対応した関数が存在します。

結局は用途に合わせて使い分けですが、それぞれの存在は知っておいて損はないと思いました。