Предупреждение C26410
Параметр "parameter" — это ссылка на уникальный указатель констант, использовать
const T*
илиconst T&
вместо него (r.32)
Как правило, ссылки на константный уникальный указатель бессмысленны. Их можно безопасно заменить необработанной ссылкой или указателем. Это предупреждение применяет правило основных рекомендаций C++ R.32.
Замечания
Уникальные проверки указателя имеют довольно широкие критерии для определения смарт-указателей. Правило основных рекомендаций C++ R.31: если у вас есть не std smart pointers, следуйте базовому шаблону из std описывает уникальные указатели и общие понятия указателя. Эвристика проста, но может привести к сюрпризам: умный тип указателя является любым типом, который определяет либо
operator->
.operator*
Тип с поддержкой копирования (общий указатель) должен иметь либо открытый конструктор копирования, либо перегруженный оператор назначения, который имеет дело с параметром ссылки, отличного от Rvalue.Код шаблона может создавать шумные предупреждения. Помните, что шаблоны можно создать с различными параметрами типа с различными уровнями косвенного обращения, включая ссылки. Некоторые предупреждения могут не быть очевидными, и исправления могут потребовать некоторых переработок шаблонов (например, явное удаление ссылочного косвенного обращения). Если код шаблона намеренно универсальный, предупреждение можно отключить.
Имя анализа кода: NO_REF_TO_CONST_UNIQUE_PTR
Пример
Ненужная ссылка:
std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
roots.begin(),
roots.end(),
[](const auto &root) { Rebalance(root.get()); }); // C26410