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.
Jangan hapus pointer mentah yang bukan
owner<T>(i.11)
Keterangan
Pemeriksaan ini mendeteksi kode tempat pemindahan owner<T> dapat menjadi opsi yang baik untuk tahap pertama pemfaktoran ulang. Seperti C26400, ini memberlakukan aturan I.11 dan R.3, tetapi berfokus pada bagian "rilis" dari masa pakai pointer. Ini memperingatkan pada setiap panggilan ke operator delete jika targetnya bukan owner<T> atau pemilik yang diasumsikan secara implisit. Untuk informasi selengkapnya tentang auto deklarasi, lihat C26400. Pemeriksaan ini mencakup ekspresi yang mengacu pada variabel global, parameter formal, dan sebagainya.
Peringatan C26400 dan C26401 selalu terjadi dengan C26409, tetapi lebih sesuai untuk skenario di mana migrasi langsung ke penunjuk pintar tidak layak. Dalam kasus seperti itu owner<T> , konsep dapat diadopsi terlebih dahulu, dan C26409 dapat ditekan sementara.
Nama analisis kode: DONT_DELETE_NON_OWNER
Lihat juga
Contoh
struct myStruct {};
myStruct* createMyStruct();
void function()
{
myStruct* pMyStruct = createMyStruct();
// ...
delete pMyStruct; // C26401. Do not delete a raw pointer that is not an owner<T>
}
Lihat bahwa C26401 dihapus jika kepemilikan pointer ditunjukkan oleh gsl::owner.
#include <gsl/pointers>
struct myStruct {};
gsl::owner<myStruct*> createMyStruct();
void function()
{
gsl::owner<myStruct*> pMyStruct = createMyStruct();
// ...
delete pMyStruct; // no warning.
}
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};
};