Peruntukan Heap dengan new/delete
Urus memori dinamik
Peruntukan Heap dengan new/delete ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 2 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.
Memori Dinamik dengan Peruntukan
Operator new memperuntukkan objek pada timbunan (storan bebas) dan memulangkan penuding kepadanya. Objek pada timbunan kekal sehingga Anda membebaskannya secara eksplisit.
#include <iostream>
int main() {
int* p = new int(42); // heap allocation
std::cout << *p << "\n";
delete p; // release it
}Melepaskan dengan Pemadaman
Setiap new mesti dipadankan dengan tepat satu delete. Jika terlupa, memori akan bocor; jika dilakukan dua kali, timbunan akan rosak.
#include <iostream>
int main() {
double* d = new double(3.5);
std::cout << *d << "\n";
delete d; // exactly once
}Tatasusunan: Peruntukan dan Pemadaman
Untuk tatasusunan, gunakan new[] dan delete[] yang sepadan. Mencampurkan new[] dengan delete biasa menghasilkan tingkah laku yang tidak ditakrifkan.
#include <iostream>
int main() {
int* arr = new int[3]{1, 2, 3};
for (int i = 0; i < 3; ++i) std::cout << arr[i] << "\n";
delete[] arr; // note the [ ]
}Mengapa Menggunakan Timbunan?
Gunakan timbunan apabila objek perlu hidup lebih lama daripada fungsi yang menciptanya, atau apabila saiznya hanya diketahui semasa masa jalan. Jika tidak, utamakan tindanan.
Jangka Hayat Timbunan Diurus Secara Manual
Tidak seperti tindanan, timbunan tidak membebaskan objek secara automatik. Anda mengawal dengan tepat masa memori dilepaskan — dan Anda bertanggungjawab terhadapnya.
#include <iostream>
int* makeCounter() {
return new int(0); // survives the function
}
int main() {
int* c = makeCounter();
std::cout << *c << "\n";
delete c;
}Tetapkan Penuding kepada nullptr Selepas Pemadaman
Selepas memadamkan objek, tetapkan penuding kepada nullptr supaya penggunaan semula secara tidak sengaja gagal dengan jelas, bukannya menyentuh memori yang telah dibebaskan.
#include <iostream>
int main() {
int* p = new int(9);
delete p;
p = nullptr; // now p is safe to check
if (!p) std::cout << "freed\n";
}Peruntukan Boleh Gagal
Jika sistem kehabisan memori, new melontarkan std::bad_alloc. Bagi peruntukan yang sangat besar, perkara ini benar-benar boleh berlaku.
Penimbal Bersaiz Masa Jalan
Tatasusunan pada timbunan boleh menggunakan saiz yang dikira semasa masa jalan — sesuatu yang tidak boleh dilakukan oleh tatasusunan tindanan secara mudah alih.
#include <iostream>
int main() {
int n = 5;
int* buf = new int[n];
for (int i = 0; i < n; ++i) buf[i] = i * i;
std::cout << buf[4] << "\n";
delete[] buf;
}Utamakan Penuding Pintar
C++ moden mengelakkan penggunaan new/delete mentah. std::unique_ptr dan std::make_unique membebaskan memori secara automatik apabila penuding keluar daripada skop.
#include <iostream>
#include <memory>
int main() {
auto p = std::make_unique<int>(42);
std::cout << *p << "\n";
} // freed automaticallyKos Timbunan
Peruntukan timbunan lebih perlahan daripada tindanan: ia mencari blok bebas dan mengemas kini rekod pengurusan. Peruntukan kecil yang kerap boleh menjejaskan prestasi.
Padankan Setiap Peruntukan
Peraturan utama: setiap new memerlukan satu delete, dan setiap new[] memerlukan satu delete[]. Lebih baik lagi, biarkan penuding pintar menguruskannya untuk Anda.
Semakan Pantas
Uji pemahaman Anda tentang peruntukan timbunan.
Rumusan
Anda telah mempelajari cara memperuntukkan pada timbunan dengan new/new[] dan melepaskannya dengan delete/delete[]. Objek timbunan hidup lebih lama daripada skopnya tetapi memerlukan pembersihan manual. Padankan setiap peruntukan, tetapkan penuding yang telah dibebaskan kepada nilai nol, dan utamakan std::unique_ptr dalam kod moden.
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 “Peruntukan Heap dengan new/delete” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Peruntukan Heap dengan new/delete”, 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 “Peruntukan Heap dengan new/delete”?
Urus memori dinamik 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 2 daripada 4.
Berapa lamakah pelajaran “Peruntukan Heap dengan new/delete” 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
- Peruntukan Stack
- Peruntukan Heap dengan new/delete
- Jangka Hayat Objek
- Pepijat Memori Biasa