Penunjuk pintar: penunjuk khas dalam C++ yang merangkum penuding mentah dan menyediakan fungsi tambahan. Jenis: std::unique_ptr: pemilikan unik, memori dikeluarkan selepas penunjuk tamat tempoh. std::shared_ptr: Pemilikan dikongsi, memori dikeluarkan apabila rujukan terakhir hilang. std::weak_ptr: Pemilikan yang lemah, tidak menghalang objek daripada dimusnahkan, dan mengelakkan rujukan bulat. Penggunaan: Isytiharkan jenis penunjuk pintar untuk menggantikan penunjuk biasa. Kes praktikal: Gunakan std::shared_ptr untuk mengurus strim fail dan menutup strim fail secara automatik tanpa mengira sama ada pengecualian berlaku.
C++ Penunjuk Pintar: Jadikan penuding lebih bijak dan singkirkan kebimbangan pengurusan memori
Dalam C++ moden, penunjuk pintar ialah alat yang berkuasa untuk meningkatkan keteguhan aplikasi dan kecekapan pengurusan memori , dengan itu melindungi pembangun daripada potensi pepijat dan kebocoran memori.
Apakah penunjuk pintar?
Petunjuk pintar ialah penunjuk khas dalam C++ yang merangkum penunjuk mentah dan menyediakan fungsi tambahan, termasuk pelepasan memori automatik, keselamatan pengecualian dan pengurusan kiraan rujukan.
Jenis penunjuk pintar
Terdapat tiga jenis penunjuk pintar yang biasa digunakan dalam C++:
Cara menggunakan
Menggunakan penunjuk pintar adalah mudah, hanya isytiharkan jenis penunjuk pintar sebagai pengganti penunjuk biasa, seperti yang ditunjukkan di bawah:
// 使用 unique_ptr 管理一个 int std::unique_ptr<int> number(new int(10)); // 使用 shared_ptr 管理一个 string std::shared_ptr<std::string> text(new std::string("Hello world!"));
Kes praktikal
Pertimbangan berikut kami mahu Baca kandungan fail daripada fail melalui fungsi baca fail:
std::string readFile(const std::string& fileName) { std::ifstream file(fileName); // 检查文件是否打开 if (!file.is_open()) { throw std::runtime_error("无法打开文件!"); } // 读取文件内容到字符串中 std::string content; file >> content; // 关闭文件 file.close(); // 返回文件内容 return content; }
Terdapat dua masalah utama dengan kod ini:
file.close()
yang bertanggungjawab untuk menutup fail perlu dilaksanakan dalam apa jua keadaan, walaupun pengecualian berlaku. file.close()
调用需要在任何情况下都执行,即使出现异常也不例外。使用智能指针,我们可以轻松解决这些问题:
std::string readFile(const std::string& fileName) { // 使用 shared_ptr 管理文件流 std::shared_ptr<std::ifstream> file(new std::ifstream(fileName)); // 检查文件是否打开 if (!*file) { throw std::runtime_error("无法打开文件!"); } // 读取文件内容到字符串中 std::string content; *file >> content; // 文件流将由 shared_ptr 自动关闭 return content; }
通过使用 std::shared_ptr
std::shared_ptr
, strim fail akan ditutup secara automatik tanpa mengira sama ada pengecualian berlaku. Selain itu, kod kini selamat mengendalikan kegagalan untuk membuka fail dan menyampaikannya kepada pemanggil melalui pengecualian. 🎜Atas ialah kandungan terperinci Penunjuk pintar C++: Jadikan penunjuk lebih pintar dan singkirkan masalah pengurusan memori. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!