私は共有ポインタインスタンスのために私自身のデストラクタを書く必要があります。残念なことに、そのようなインスタンスはライブラリ関数呼び出しから取得され、それを初期化するのではありません。だからここでデストラクタを "設定"することはできますか?既存の共有ポインタのためにDeleterを設定するには?
理想的には、私の心の中のコードは、私が最初に仮定するためのAPIを見つけられませんでした
pointer.setDeleter(myDeleter);
または
pointer = std::make_shared<MyType>(pointerOld.get(), myDeleter);
のように見えることがあります。 2つ目は、MyType
には2つのパラメータを持つコンストラクタがありません。コンパイルできません。
これについてのご意見はありますか?
ありがとうございます!
なぜこれが欲しいですか?おそらく、図書館はあなたが彼らのデリターを嫌っているとは思わないでしょう。 – GManNickG
@GManNickGイベントベースメカニズムでライブラリを使用しているためです。したがって、私は、あるスレッド(つまり、イベントベースのスレッド)でDeleterを呼び出すようにします。それ以外の場合、Deleterはセグメント障害を導入します。 – zzy
共有ポインタへの最後の参照を解放するときに呼び出される必要がありますか、またはソース共有ポインタの寿命を延ばす新しい共有ポインタ(独自の有効期間を持つ)を作成するだけで十分ですゼロになり、余分なコードが実行されますか? – Yakk