IDisposableオブジェクトの共有所有権を提供するC#クラスがありますか? C++のshared_ptrのようなもの?もしそうでなければ、ここでベストプラクティスは何ですか?C#でIDisposableオブジェクトの共有所有者
UPDATE
私はネイティブのlibを超えるC++/CLIのラッパーを書いています。そして、ネイティブリソース(例えば、MAPI COMインターフェイス)をリリースする必要があります。したがって、を解放してください。
ネイティブ一部:
//Message.h
class Message
{ ... };
//MessageSet.h
class MessageSet
{
...
class iterator : public std::iterator<std::forward_iterator_tag, Message*>
{
...
public:
Message* operator*();
bool operator!=(const iterator& that);
iterator& operator++();
};
iterator begin();
iterator end();
};
マネージド部分(C++/CLI):
public ref class Message
{
native::Message* inst;
public:
Message(native::Message* inst);
~Message();
!Message();
};
public ref class MessageSet : public IEnumerable<Message^>
{
native::MessageSet* inst;
public:
MessageSet(native::Message* inst);
~MessageSet();
!MessageSet();
virtual IEnumerator<Message^>^ GetEnumerator();
virtual System::Collections::IEnumerator^ EnumerableGetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
};
私はメッセージで(多くの同時消費者があるBroadcastBlockブロックすなわち)TPLデータフロー内のオブジェクトを使用しますC#私はこれらのメッセージのDispose()をいつ呼び出すべきかわかりません。
あなたは何を解決しようとしていますか? –
誰が処分を呼びますか?これは、それを行うことができるより高いレベルのオブジェクトです(たとえば、最初にこれらのスレッドを呼び出すもの)。オブジェクトを作成したのは誰ですか?これは、HTTPリクエストや「所有」できる(または所有できるIoCコンテナを持つ)ことができ、このオブジェクトを廃棄することのコンテキストで起こっていますか? –
大きく、大きな違いがあります。 Dispose()の呼び出しはオプションです。オブジェクトの明確な所有権を確立できず、独自の参照カウントスキームを実装する必要がある場合は、単純に呼び出してGCで処理させるほうがずっと優れています。 –