共用方式為


警告 C26403

重設或明確刪除 owner<T> 指標 ' variable ' (r.3)

擁有者指標就像唯一指標:它們獨佔擁有資源,以及管理資源的發行,或其傳送給其他擁有者。 這項檢查會驗證本機擁有者指標是否可透過函式中的所有執行路徑正確維護其資源。 如果資源未轉移給另一個擁有者,或未明確釋放,檢查程式會發出警告,並指向指標變數的宣告。

如需詳細資訊,請參閱 C++ 核心指導方針

備註

  • 目前這項檢查不會提供無法釋放資源的確切路徑。 未來版本中可能會改善此行為。 可能很難找到修正的確切位置。 更好的方法是嘗試將複雜函式中的純指標取代為唯一指標,以避免任何風險。

  • 檢查可能會捨棄過於複雜的函式,以免封鎖程式碼分析。 一般而言,函式的複雜性應維持在一些合理的臨界值之下。 如果 C++ Core Guidelines 模組有明確的需求,我們可能會考慮將本機複雜度檢查新增至 C++ Core Guidelines 模組。 這項限制適用于對資料流程敏感的其他規則。

  • 只有在指標的 Null 檢查之後,才會刪除記憶體,警告可能會引發明顯誤判的情況。 這些誤判是工具 API 目前限制的結果,但未來可能會加以改善。

程式碼分析名稱: RESET_OR_DELETE_OWNER

範例

錯誤處理期間遺漏清除:

gsl::owner<int*> sequence = GetRandomSequence(); // C26403

try
{
    StartSimulation(sequence);
}
catch (const std::exception& e)
{
    if (KnownException(e))
        return; // Skipping the path which deletes the owner.

    ReportException(e);
}

delete [] sequence;