私は次のパターンが安全に使用してお勧めですか?まず、コンテナから見つかったunique_ptrを別の一時的なunique_ptrに移動し、コンテナから消去したいとします。次に、移動したポインタを使用して実際のメソッドを呼び出します。unique_ptrをコンテナから移動して消去するのは安全ですか?
高価なメソッドを呼び出しながら、コンテナ全体をロックしないようにするためです。
次の例を参照してください。
std::unordered_map<string, std::unique_ptr<Sample>> samples;
std::unique_ptr<Sample> ptr_to_remove;
// Lock (reader lock) samples here.
auto it = samples.find(name);
if (it != samples.end()) {
ptr_to_remove = std::move(it->second);
samples.erase(it);
}
// Unlock samples here.
if (ptr_to_remove) {
ptr_to_remove->DoSomeExpensiveTask();
}
試したときに何が起こったのですか? –
it-> secondは 'Sample'オブジェクトであり、' unique_ptr'ではありません。 'std :: unordered_map>サンプルを意味しましたか? (コードをコンパイルするため)。 –
A.S.H、はい。それは正しいです:)質問を更新しました – MaxHeap