Sdílet prostřednictvím


Upozornění C26408

Vyhněte se malloc() a free()upřednostněte nothrow verzi new s delete verzí (r.10)

Toto upozornění označuje místa, kde malloc nebo free je vyvolána explicitně v souladu s R.10: Vyhněte se malloc a free. Jedním z možných oprav takových upozornění je použití std::make_unique , aby se zabránilo explicitnímu vytvoření a zničení objektů. Pokud taková oprava není přijatelná, měli byste preferovat operátory new a delete . V některých případech, pokud výjimky nejsou vítány malloc a free lze je nahradit nothrow verze operátorů new a delete.

Poznámky

  • Abychom zjistili malloc(), zkontrolujeme, jestli volání vyvolá globální funkci s názvem malloc nebo std::malloc. Funkce musí vrátit ukazatel na void celočíselný typ bez znaménka a přijmout jeden parametr.

  • Abychom zjistili free(), kontrolujeme globální funkce pojmenované free nebo std::free vracejí žádný výsledek a přijímají jeden parametr, což je ukazatel na void.

Název analýzy kódu: NO_MALLOC_FREE

Viz také

C++ Core Guidelines R.10

Příklad

#include <new>

struct myStruct {};

void function_malloc_free() {
    myStruct* ms = static_cast<myStruct*>(malloc(sizeof(myStruct))); // C26408
    free(ms); // C26408
}

void function_nothrow_new_delete() {
    myStruct* ms = new(std::nothrow) myStruct;
    operator delete (ms, std::nothrow);
}