C++ Academy · Pelajaran

nullptr dan Keselamatan Penuding Null

Gunakan nullptr dan bukannya NULL atau 0 serta lindungi daripada penyahrujukan null.

Pelajaran 3 daripada 413 langkah

nullptr dan Keselamatan Penuding Null ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah Penuding Nol

Penuding nol ialah nilai khas yang menunjuk kepada "tiada apa-apa". Menyahrujuknya menyebabkan tingkah laku tidak ditakrifkan — biasanya program ranap dengan kegagalan segmen.

Kata Kunci Penuding Nol dalam C++ Moden

Sejak C++11, kata kunci nullptr mewakili literal penuding nol berjenis. Utamakannya berbanding NULL atau 0.

int* p1 = nullptr;
int* p2 = NULL;       // legacy macro
int* p3 = 0;          // legacy literal

Mengapa nullptr

NULL hanyalah makro untuk 0. Ia boleh mengelirukan penyelesaian lebihan muatan antara int dan int*. nullptr mempunyai jenis unik std::nullptr_t.

void f(int);
void f(int*);

f(NULL);      // calls f(int) -- surprising!
f(nullptr);   // calls f(int*) -- correct

Menyemak Nilai Nol

Penuding ditukar secara tersirat kepada bool: bukan nol ialah benar, manakala nol ialah palsu.

if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";

Sentiasa Mulakan

Penuding yang tidak dimulakan mengandungi nilai sampah dan seolah-olah menunjuk ke sesuatu tempat. Sentiasa mulakannya, walaupun hanya dengan nullptr.

int* p;            // BAD: undefined contents
int* q = nullptr;  // GOOD

Menyahrujuk Nilai Nol

Membaca atau menulis melalui penuding nol menyebabkan tingkah laku tidak ditakrifkan. Pada kebanyakan sistem meja, ia menyebabkan kegagalan segmen. Pada peranti terbenam, ia boleh merosakkan memori secara senyap.

Semakan Perlindungan

Lakukan semakan sebelum menyahrujuk dalam API awam atau apabila pemanggil mungkin menghantar nilai nol.

void process(int* data) {
    if (!data) return;
    *data *= 2;
}

Rujukan Menggantikan Penuding

Jika nilai nol tidak pernah bermakna, gunakan parameter rujukan. Pengkompil menjamin bahawa rujukan itu terikat pada sesuatu.

// Before
void f(Widget* w);   // can be null?

// After
void f(Widget& w);   // must be a real widget

std::optional untuk Nilai Pilihan

C++17 menambahkan std::optional<T> untuk semantik "mungkin ada nilai" — lebih jelas daripada penuding yang boleh bernilai nol dalam konteks yang tidak melibatkan peruntukan.

#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;

Penuding Pintar dan Nilai Nol

std::unique_ptr dan std::shared_ptr juga boleh bernilai nol. Kedua-duanya ditukar kepada bool untuk semakan dan ditetapkan semula dengan = nullptr.

Kesilapan: Penuding Tergantung selepas Delete

Selepas delete p, penuding masih menyimpan alamat lama. Tetapkan semula: p = nullptr;. Penuding pintar melakukannya secara automatik.

Semakan Pantas

Literal penuding nol yang manakah patut digunakan dalam C++ moden?

Imbas Kembali

Gunakan nullptr untuk nilai penuding nol. Sentiasa mulakan penuding. Lakukan semakan sebelum menyahrujuk atau, lebih baik lagi, gunakan rujukan dan std::optional apabila nilai nol tidak pernah sah.

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “nullptr dan Keselamatan Penuding Null” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “nullptr dan Keselamatan Penuding Null”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “nullptr dan Keselamatan Penuding Null”?

Gunakan nullptr dan bukannya NULL atau 0 serta lindungi daripada penyahrujukan null. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “nullptr dan Keselamatan Penuding Null” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Penuding Mentah dan Operator Address-of
  2. Penyahrujukan dan Aritmetik Penuding
  3. nullptr dan Keselamatan Penuding Null
  4. Masa untuk Menggunakan Penuding berbanding Rujukan
← Kembali ke C++ Academy