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.
If you define or delete any default operation in the type 'type-name', define or delete them all (c.21).
Pedoman Inti C++:
=delete
Operasi khusus seperti konstruktor diasumsikan untuk mengubah perilaku jenis sehingga lebih mengandalkan mekanisme bahasa untuk secara otomatis menerapkan skenario tertentu. Contoh kanonis adalah manajemen sumber daya. Jika Anda secara eksplisit menentukan, default, atau menghapus salah satu operasi khusus ini, itu memberi sinyal bahwa Anda ingin menghindari penanganan khusus jenis. Tidak konsisten untuk membiarkan operasi lain tidak ditentukan, yaitu, secara implisit didefinisikan sebagai dihapus oleh pengkompilasi.
Keterangan
Pemeriksaan ini menerapkan aturan lima, yang memperlakukan operasi berikut sebagai khusus:
- menyalin konstruktor,
- memindahkan konstruktor,
- menyalin operator penugasan,
- memindahkan operator penugasan, dan
- destruktor.
Aturan tidak memeriksa apakah operasi ditentukan dengan cara yang sama. Tidak apa-apa untuk mencampur operasi yang dihapus dan default dengan operasi yang ditentukan secara eksplisit. Namun, Anda harus menentukan semuanya jika Anda menentukan salah satunya.
Tingkat akses tidak penting dan juga dapat dicampur.
Peringatan menandai definisi fungsi non-statis pertama dari jenis, sekali per jenis.
Contoh
Dalam contoh ini, warning::S hanya menentukan konstruktor default dan destruktor.
no_warning::S Deklarasi menentukan atau menghapus kelima fungsi anggota khusus.
// C26432.cpp
namespace warning
{
struct S
{
S() noexcept { ++_count; }
~S() { --_count; } // C26432 because only the constructor and destructor are explicitly defined.
static unsigned _count;
};
unsigned S::_count = 0;
}
namespace no_warning
{
struct S
{
S() noexcept { _count++; }
S(const S&) = delete;
S(S&&) = delete;
S& operator=(const S&) = delete;
S& operator=(S&&) = delete;
~S() { --_count; }
static unsigned _count;
};
unsigned S::_count = 0;
}