shared_ptrを使っていちいちカスタムデリータを記述しなくてもいいようにしたい
shared_ptrを使ってC言語のライブラリのリソースを管理するコードを書きたいです。
資源の開放のために「FreeResource」のような関数があるのでカスタムデリータとして登録しようとしたのですが、コンストラクタ引数として記述するのが面倒なので省略したいです。
文章が下手なのと用語の用法があっているのかわからないのでコードを読んでいただきたいです。
書きたい処理(C言語的)
C
1Lib_Resource* r = Lib_GetNewResource(); 2Lib_Use(r); 3Lib_FreeResource(r); // 資源を開放する
理想
C++
1Resource r = Lib_GetNewResource(); 2Lib_Use(r); 3// 誰も使わなくなったときに勝手にLib_FreeResourceが呼ばれる
発想の限界
C++
1typedef std::shared_ptr<Lib_Resource> Resource; 2Resource r(Lib_FreeResource) = Lib_GetNewResource();// 変数を作るときにFreeResourceを書く必要がある・・・? 3Lib_Use(r); 4// 誰も使わなくなったときに勝手にLib_FreeResourceが呼ばれる
試したこと
- shared_ptrを継承したクラスを書こうとしたがどこでdeleteされるかわからなかったので挫折
- そもそも標準なのかわからないので環境に依存したコードになる可能性を考えて絶望
- shared_ptr的なものを自作しようとするも車輪の再発明はまずいと考え他の方法を探す
Resource *r = createResourcePointer()
みたいな形が使えると考えたが本末転倒なような気がする
補足情報
- 一般的な話に言い換えていますが、実際のところSDL_SurfaceとSDL_Textureを管理するために書こうと考えています。
- C++17までは使えますがBoostは使いたくないです・・・
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/13 06:39