Mengapa Penuding Pintar Menggantikan new dan delete Mentah
Fahami RAII dan sebab pemilikan penuding mentah jarang betul dalam C++ moden.
Mengapa Penuding Pintar Menggantikan new dan delete Mentah ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.
new dan delete Mentah
Warisan C: new T memperuntukkan T pada timbunan; delete membebaskannya. Anda mesti memadankan setiap new dengan tepat satu delete — jika tidak, berlaku kebocoran atau ranap.
Widget* w = new Widget();
// ... use w ...
delete w; // forget this and you leakPerkara yang Boleh Berlaku
Kegagalan yang biasa berlaku:
deleteterlupa — kebocoran memorideleteberganda — tingkah laku tidak ditakrifkan- Pengecualian dilemparkan antara
newdengandelete— kebocoran - Memulangkan penuding mentah dengan pemilikan yang tidak jelas
RAII Menyelamatkan Keadaan
Pemerolehan Sumber ialah Inisialisasi: ikat jangka hayat sumber kepada jangka hayat objek timbunan. Pemusnah membebaskan sumber — walaupun pengecualian dilemparkan.
Idea Penuding Pintar
Penuding pintar ialah pembalut RAII kecil di sekeliling penuding mentah. Pemusnahnya memanggil delete. Anda tidak akan terlupa untuk membebaskannya.
Tiga Penuding Pintar
Penuding pintar pustaka standard dalam <memory>:
std::unique_ptr<T>— pemilikan eksklusifstd::shared_ptr<T>— pemilikan dikongsi dengan pengiraan rujukanstd::weak_ptr<T>— pemerhati tanpa pemilikan bagi shared_ptr
Penuding Pintar Tidak Membebankan
unique_ptr mempunyai overhed sifar (saiz dan kelajuan yang sama seperti penuding mentah). shared_ptr mempunyai kos kecil untuk pengiraan rujukan atom.
Tiada Lagi Delete Manual
Dengan penuding pintar, anda hampir tidak perlu menulis delete. Pemusnah akan menguruskannya.
#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyedPenuding Pintar dan Pengecualian
Jika pengecualian dilemparkan di tengah-tengah fungsi, pemboleh ubah setempat dimusnahkan dalam susunan terbalik. Penuding pintar membebaskan sumbernya secara automatik — penuding mentah pula mengalami kebocoran.
Pemilikan dalam Jenis
Jenis penuding pintar kini mengekodkan pemilikan. Dengan membaca tandatangan fungsi, anda boleh mengetahui pihak yang memiliki objek itu.
// I take ownership
void consume(std::unique_ptr<Widget> w);
// I look but do not own
void inspect(const Widget& w);Penuding Mentah Masih Wujud
Gunakan penuding mentah (atau rujukan) untuk akses tanpa pemilikan. Penuding ini menyampaikan maksud "Saya meminjam, bukan memiliki."
Menggantikan new dengan Fungsi make
Utamakan std::make_unique (C++14) dan std::make_shared (C++11). Kedua-duanya selamat daripada pengecualian dan sedikit lebih cekap berbanding memanggil new secara langsung.
auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");Semakan Pantas
Apakah sebab utama menggunakan std::unique_ptr berbanding pasangan new/delete mentah?
Imbas Kembali
new/delete mentah mudah menyebabkan ralat. Penuding pintar membalut objek yang diperuntukkan pada timbunan dalam pemegang RAII yang membebaskannya secara automatik. Utamakan std::make_unique dan std::make_shared demi keselamatan dan prestasi.
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 “Mengapa Penuding Pintar Menggantikan new dan delete Mentah” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Mengapa Penuding Pintar Menggantikan new dan delete Mentah”, 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 “Mengapa Penuding Pintar Menggantikan new dan delete Mentah”?
Fahami RAII dan sebab pemilikan penuding mentah jarang betul dalam C++ moden. 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 1 daripada 4.
Berapa lamakah pelajaran “Mengapa Penuding Pintar Menggantikan new dan delete Mentah” 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
- Mengapa Penuding Pintar Menggantikan new dan delete Mentah
- unique_ptr: Pemilikan Eksklusif
- shared_ptr dan weak_ptr: Pemilikan Dikongsi
- Penghapus Tersuai dan Fungsi Make