C++ 11 では、shared_ptr
非ポインター リソースを制御するために使用できますか?
unique_ptr
非ポインタ リソースの管理に使用できます。これは、以下を提供するカスタム削除クラスを実装することによって行われます。
- A
typedef {TYPE} pointer;
where{TYPE}
は非ポインター リソース タイプです operator()(pointer)
制御されたリソースを解放します
...そしてunique_ptr
、2 番目のテンプレート パラメータとしてカスタム デリータを使用して a をインスタンス化します。
たとえば、Windows では、サービス コントロール ハンドルunique_ptr
を管理するを作成できます。このハンドル タイプは、 を呼び出すことによって解放されるのではなく、 を呼び出すことによって解放されます。これを行うサンプルコードは次のとおりです。delete
CloseServiceHandle()
カスタム・デリーター
struct SvcHandleDeleter
{
typedef SC_HANDLE pointer;
SvcHandleDeleter() {};
template<class Other> SvcHandleDeleter(const Other&) {};
void operator()(pointer h) const
{
CloseServiceHandle(h);
}
};
typedef std::unique_ptr<SC_HANDLE,SvcHandleDeleter> unique_sch;
インスタンス化
unique_sch scm(::OpenSCManagerA(0, 0, SC_MANAGER_ALL_ACCESS));
shared_ptr
ポインタ以外のリソースを制御するために使用することは可能ですか?
ドキュメントによると、カスタムの削除クラスを提供する手段を提供するshared_ptr
コンストラクターのオーバーロードがありますが、ポインターでもポインターのラッパーでもないリソースタイプを受け入れるコンストラクターはありません。
これはどのように行うことができますか?