Bagikan melalui


Peringatan C26408

Hindari malloc() dan free(), lebih suka nothrow versi new dengan delete (r.10)

Bendera peringatan ini menempatkan tempat malloc atau free dipanggil secara eksplisit sesuai dengan R.10: Hindari malloc dan free. Salah satu potensi perbaikan untuk peringatan tersebut adalah menggunakan std::make_unique untuk menghindari pembuatan dan penghancuran objek secara eksplisit. Jika perbaikan seperti itu tidak dapat diterima, operator baru dan hapus harus lebih disukai. Dalam beberapa kasus, jika pengecualian tidak diterima, malloc dan free dapat diganti dengan versi nothrow operator new dan delete.

Keterangan

  • Untuk mendeteksi malloc(), kami memeriksa apakah panggilan memanggil fungsi global bernama malloc atau std::malloc. Fungsi harus mengembalikan penunjuk ke void dan menerima satu parameter jenis integral yang tidak ditandatangani.

  • Untuk mendeteksi free(), kami memeriksa fungsi global bernama free atau std::free yang tidak mengembalikan hasil dan menerima satu parameter, yang merupakan penunjuk ke void.

Nama analisis kode: NO_MALLOC_FREE

Lihat juga

C++ Panduan Inti R.10

Contoh

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