Мне интересно, что следующий шаблон безопасен в использовании и рекомендуется? Во-первых, я хотел бы переместить 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> samples;'? (Для компиляции кода). –
A.S.H, да. это правильно :) Обновился вопрос – MaxHeap