0

2 つ以上の他のオブジェクトによって共有されるオブジェクトを管理するためのベスト プラクティスはありますか。別のスレッドで実行しているときでも?

たとえば、A が作成され、それへのポインターが B と C に渡されます。B->GiveObj(A); C->GiveObj(A);

どうすればobjAを削除できますか?

これまでのところ、私が考えていたのは、参照がいくつあるかを監視し、このカウンターが0の場合、これを削除します(Aが渡されたときなど、受信者はA-> Aquire()を呼び出し、完了したらA-を呼び出します- >リリース();

または、B->RemoveObj(A); と伝えることもできます。そして C->RemoveObj(A); 問題は、B または C が別のスレッドで実行されている場合、A の処理が完了するまで A を削除できず、RemoveObj 呼び出しが表示されることです。(乱雑なフラグの束が必要です)。

おそらくシグナル/スロットを使用して、これを行う良い方法はありますか?

ありがとう

4

1 に答える 1

2

最適なオプションは、 Boost の shared_ptrなどのスマート ポインターの実装を使用することです。

これにより、削除を心配することなく、必要に応じてポインターを渡すことができます。


編集:

signal/slot タグが追加されていることに気付きました。たまたま Qt を使用している場合は、ブースト ポインターの実装の代わりにQSharedPointer (または同様のもの)が必要になるでしょう。

于 2010-03-12T00:13:18.743 に答える