nullptr dan Keamanan Pointer Null
Gunakan nullptr, bukan NULL atau 0, dan cegah dereferensi null
nullptr dan Keamanan Pointer Null adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Apa Itu Penunjuk Null?
Penunjuk null adalah nilai khusus yang menunjuk ke "ketiadaan". Melakukan dereferensi terhadapnya menghasilkan perilaku tak terdefinisi — biasanya program berhenti dengan galat segmentasi.
nullptr dalam C++ Modern
Sejak C++11, kata kunci nullptr merepresentasikan literal penunjuk null bertipe. Utamakan ini daripada NULL atau 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalMengapa nullptr?
NULL hanyalah makro untuk 0. Ini dapat membingungkan resolusi kelebihan beban antara int dan int*. nullptr memiliki tipe unik std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctMemeriksa Nilai Null
Penunjuk dikonversi secara implisit menjadi bool: nilai yang tidak null adalah true, sedangkan nilai null adalah false.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Selalu Inisialisasi
Penunjuk yang belum diinisialisasi berisi data sampah dan seolah-olah menunjuk ke suatu tempat. Selalu lakukan inisialisasi, meskipun hanya ke nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODMelakukan Dereferensi Null
Membaca atau menulis melalui penunjuk null menghasilkan perilaku tak terdefinisi. Pada sebagian besar sistem desktop, hal ini menyebabkan galat segmentasi. Pada perangkat tertanam, hal ini dapat merusak memori secara diam-diam.
Pemeriksaan Pencegahan
Lakukan pemeriksaan sebelum dereferensi dalam API publik atau ketika pemanggil mungkin memberikan nilai null.
void process(int* data) {
if (!data) return;
*data *= 2;
}Referensi sebagai Pengganti Penunjuk
Jika nilai null tidak pernah bermakna, gunakan parameter referensi. Kompilator menjamin bahwa referensi terikat pada sesuatu.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional untuk Nilai Opsional
C++17 menambahkan std::optional<T> untuk semantik "mungkin memiliki nilai" — lebih jelas daripada penunjuk yang dapat bernilai null dalam konteks non-alokasi.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Penunjuk Pintar dan Null
std::unique_ptr dan std::shared_ptr juga dapat bernilai null. Keduanya dikonversi menjadi bool untuk pemeriksaan dan diatur ulang dengan = nullptr.
Kesalahan: Menggantung Setelah Delete
Setelah delete p, penunjuk masih menyimpan alamat lama. Atur ulang: p = nullptr;. Penunjuk pintar melakukannya secara otomatis.
Pemeriksaan Cepat
Literal penunjuk null mana yang harus digunakan dalam C++ modern?
Ringkasan
Gunakan nullptr untuk nilai penunjuk null. Selalu inisialisasi penunjuk. Lakukan pemeriksaan sebelum dereferensi atau, lebih baik, gunakan referensi dan std::optional ketika nilai null tidak pernah valid.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “nullptr dan Keamanan Pointer Null” gratis?
Ya — teks lengkap “nullptr dan Keamanan Pointer Null” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “nullptr dan Keamanan Pointer Null”?
Gunakan nullptr, bukan NULL atau 0, dan cegah dereferensi null Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “nullptr dan Keamanan Pointer Null” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pointer Mentah dan Operator Address-of
- Dereferensi dan Aritmetika Pointer
- nullptr dan Keamanan Pointer Null
- Kapan Menggunakan Pointer vs Referensi