共用方式為


警告 C26409

請避免呼叫 newdelete 明確使用 std::make_unique<T> (r.11)。

即使程式碼對 和 的呼叫 malloc 是乾淨的,我們還是建議您考慮比明確使用運算子 newdelete 更好的選項。 free

C++ 核心指導方針
R.11:避免明確呼叫 new 和 delete

最終的修正是使用智慧型指標和適當的處理站函式,例如 std::make_unique

備註

  • 檢查程式會在呼叫任何類型的運算子 newdelete 時發出警告:純量、向量、多載版本(全域和類別特定),以及放置版本。 放置 new 案例可能需要核心指導方針中的一些厘清建議修正,而且未來可能會省略。

程式碼分析名稱: NO_NEW_DELETE

範例

此範例顯示針對明確 newdelete 引發 C26409。 請考慮改用智慧型指標處理站函式,例如 std::make_unique

void f(int i)
{
    int* arr = new int[i]{}; // C26409, warning is issued for all new calls
    delete[] arr;            // C26409, warning is issued for all delete calls

    auto unique = std::make_unique<int[]>(i); // prefer using smart pointers over new and delete
}

觸發此警告的 C++ 語式如下: delete this 。 警告是刻意的,因為 C++ 核心指導方針不建議使用此模式。 您可以使用 屬性隱藏警告 gsl::suppress ,如下列範例所示:

class MyReferenceCountingObject final
{
public:
    void AddRef();
    void Release() noexcept
    {
        ref_count_--;
        if (ref_count_ == 0)
        {
            [[gsl::suppress(i.11)]]
            delete this; 
        }
    }
private:
    unsigned int ref_count_{1};
};