整数キーを使用して、 std::map などの std::shared_ptr to C++ クラス インスタンスをマップに格納したいと考えています。ただし、このマップには 2 つのプロパティが必要です。
- キーが存在しない場合は、新しいオブジェクトを作成するのではなく、エラーを返します。
- キーが存在する場合は、std::shared_ptr のコピーをアトミックに取得します。つまり、あるスレッドでマップからオブジェクトを削除すると同時に、別のスレッドでマップからオブジェクトを取得することはできません。
オーバーヘッドを回避するために、可能であればマップからオブジェクトを取得および削除するための単一のミューテックス (複数の読み取り、単一の書き込みであっても) を避けたいと思います。
そのようなマップクラスはライブラリに存在しますか? そうでない場合は、実装方法を提案できますか?