Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Hindari memanggil
newdandeletesecara eksplisit, gunakanstd::make_unique<T>sebagai gantinya (r.11).
Bahkan jika kode bersih dari panggilan ke malloc dan , kami masih menyarankan agar Anda mempertimbangkan opsi yang lebih baik daripada penggunaan operatorfreenewdelete.
Pedoman Inti C++:
R.11: Hindari panggilan new dan delete secara eksplisit
Perbaikan utamanya adalah menggunakan penunjuk cerdas dan fungsi pabrik yang sesuai, seperti std::make_unique.
Keterangan
- Pemeriksa memperingatkan panggilan ke semua jenis operator
newataudelete: skalar, vektor, versi yang kelebihan beban (global dan khusus kelas), dan versi penempatan. Kasus penempatannewmungkin memerlukan beberapa klarifikasi dalam Panduan Inti untuk perbaikan yang disarankan, dan dapat dihilangkan di masa mendatang.
Nama analisis kode: NO_NEW_DELETE
Contoh
Contoh ini menunjukkan C26409 dinaikkan untuk eksplisit new dan delete. Pertimbangkan untuk menggunakan fungsi pabrik penunjuk cerdas seperti std::make_unique sebagai gantinya.
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
}
Ada idiom C++ yang memicu peringatan ini: delete this. Peringatan disengaja, karena Panduan Inti C++ mencegah pola ini. Anda dapat menekan peringatan dengan menggunakan atribut , seperti yang gsl::suppress ditunjukkan dalam contoh ini:
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};
};