potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

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からの作成しか対応しません。 各種エラーパターン(エラーコード、フェイルファスト、例外)に対応した関数が存在します。

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