警告 C26410
パラメーター 'parameter' は、const の一意のポインターへの参照です。代わりに使用
const T*
するか、代const T&
わりに (r.32)
一般に、const ユニーク ポインターへの参照は意味を持ちません。 これらは、生の参照またはポインターに安全に置き換えることができます。 この警告は、C++ Core Guidelines ルール R.32 を適用します。
解説
ユニーク ポインター チェックには、スマート ポインターを識別するための広範な条件があります。 C++ Core Guidelines ルール R.31: std 以外のスマート ポインターがある場合は、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