警告 C26409
請避免呼叫
new
並delete
明確使用std::make_unique<T>
(r.11)。
即使程式碼對 和 的呼叫 malloc
是乾淨的,我們還是建議您考慮比明確使用運算子 new
和 delete
更好的選項。 free
C++ 核心指導方針 :
R.11:避免明確呼叫 new 和 delete
最終的修正是使用智慧型指標和適當的處理站函式,例如 std::make_unique
。
備註
- 檢查程式會在呼叫任何類型的運算子
new
或delete
時發出警告:純量、向量、多載版本(全域和類別特定),以及放置版本。 放置new
案例可能需要核心指導方針中的一些厘清建議修正,而且未來可能會省略。
程式碼分析名稱: NO_NEW_DELETE
範例
此範例顯示針對明確 new
和 delete
引發 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};
};