Udostępnij za pośrednictwem


Ostrzeżenie C26408

Unikaj malloc() i free(), preferuj nothrow wersję elementu deletenew (r.10)

To ostrzeżenie flaguje miejsca, w których malloc lub free jest wywoływany jawnie zgodnie z R.10: Unikaj malloc i free. Jedną z możliwych poprawek takich ostrzeżeń byłoby użycie polecenia std::make_unique w celu uniknięcia jawnego tworzenia i niszczenia obiektów. Jeśli taka poprawka nie jest akceptowalna, preferowane powinny być operatory new i delete . W niektórych przypadkach, jeśli wyjątki nie są mile widziane i mallocfree można je zastąpić wersją nothrow operatorów new i delete.

Uwagi

  • Aby wykryć malloc(), sprawdzamy, czy wywołanie wywołuje funkcję globalną o nazwie malloc lub std::malloc. Funkcja musi zwrócić wskaźnik do void i zaakceptować jeden parametr niepodpisanego typu całkowitego.

  • Aby wykryć free(), sprawdzamy funkcje globalne o nazwie free lub std::free które nie zwracają żadnego wyniku i akceptują jeden parametr, który jest wskaźnikiem do void.

Nazwa analizy kodu: NO_MALLOC_FREE

Zobacz też

Podstawowe wytyczne języka C++ R.10

Przykład

#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);
}