Mengapa Pointer Cerdas Menggantikan new dan delete Mentah
Pahami RAII dan mengapa memiliki pointer mentah jarang tepat dalam C++ modern
Mengapa Pointer Cerdas Menggantikan new dan delete Mentah adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
new dan delete Mentah
Warisan dari C: new T mengalokasikan T di memori dinamis; delete membebaskannya. Anda harus memasangkan setiap new dengan tepat satu delete—jika tidak, terjadi kebocoran atau program dapat berhenti.
Widget* w = new Widget();
// ... use w ...
delete w; // forget this and you leakApa yang Bisa Salah
Kegagalan yang umum:
deleteyang terlupakan—kebocoran memorideleteganda—perilaku tidak terdefinisi- Pengecualian yang dilempar antara
newdandelete—kebocoran - Mengembalikan penunjuk mentah dengan kepemilikan yang tidak jelas
RAII sebagai Solusi
Perolehan Sumber Daya adalah Inisialisasi: kaitkan masa hidup sumber daya dengan masa hidup objek pada tumpukan. Destruktor melepaskan sumber daya—bahkan jika pengecualian dilempar.
Gagasan Penunjuk Cerdas
Penunjuk cerdas adalah pembungkus RAII kecil di sekitar penunjuk mentah. Destruktornya memanggil delete. Anda tidak akan lupa membebaskannya.
Tiga Penunjuk Cerdas
Penunjuk cerdas dari pustaka standar dalam <memory>:
std::unique_ptr<T>— kepemilikan eksklusifstd::shared_ptr<T>— kepemilikan bersama dengan penghitungan referensistd::weak_ptr<T>— pengamat tanpa kepemilikan terhadap shared_ptr
Penunjuk Cerdas Itu Ringan
unique_ptr tidak memiliki overhead (ukuran dan kecepatannya sama seperti penunjuk mentah). shared_ptr memiliki biaya kecil untuk penghitungan referensi atomik.
Tidak Ada Lagi delete Manual
Dengan penunjuk cerdas, Anda hampir tidak pernah menulis delete. Destruktor akan menanganinya.
#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyedPenunjuk Cerdas dan Pengecualian
Jika pengecualian dilempar di tengah fungsi, variabel lokal dihancurkan dalam urutan terbalik. Penunjuk cerdas melepaskan sumber dayanya secara otomatis—penunjuk mentah mengalami kebocoran.
Kepemilikan dalam Tipe
Sekarang tipe penunjuk cerdas menyandikan kepemilikan. Dengan membaca deklarasi fungsi, Anda dapat mengetahui siapa yang memiliki objek tersebut.
// I take ownership
void consume(std::unique_ptr<Widget> w);
// I look but do not own
void inspect(const Widget& w);Penunjuk Mentah Masih Ada
Gunakan penunjuk mentah (atau referensi) untuk akses tanpa kepemilikan. Penunjuk tersebut menyampaikan pesan "Saya meminjam, bukan memiliki."
Mengganti new dengan Fungsi make
Lebih baik gunakan std::make_unique (C++14) dan std::make_shared (C++11). Keduanya aman terhadap pengecualian dan sedikit lebih efisien daripada memanggil new secara langsung.
auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");Pemeriksaan Singkat
Apa alasan utama menggunakan std::unique_ptr daripada pasangan new/delete mentah?
Ringkasan
new/delete mentah rentan terhadap kesalahan. Penunjuk cerdas membungkus objek yang dialokasikan di memori dinamis dalam pengelola RAII yang melepaskan sumber daya secara otomatis. Lebih baik gunakan std::make_unique dan std::make_shared demi keamanan dan performa.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengapa Pointer Cerdas Menggantikan new dan delete Mentah” gratis?
Ya — teks lengkap “Mengapa Pointer Cerdas Menggantikan new dan delete Mentah” 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 “Mengapa Pointer Cerdas Menggantikan new dan delete Mentah”?
Pahami RAII dan mengapa memiliki pointer mentah jarang tepat dalam C++ modern 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 1 dari 4.
Berapa lama pelajaran “Mengapa Pointer Cerdas Menggantikan new dan delete Mentah” 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
- Mengapa Pointer Cerdas Menggantikan new dan delete Mentah
- unique_ptr: Kepemilikan Eksklusif
- shared_ptr dan weak_ptr: Kepemilikan Bersama
- Penghapus Kustom dan Fungsi Make