Jangka Hayat Objek
Apabila objek dicipta dan dimusnahkan
Jangka Hayat Objek 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.
Apabila Objek Dicipta
Jangka hayat objek bermula selepas storannya diperuntukkan dan pembinanya selesai. Mulai saat itu, objek tersebut boleh digunakan sepenuhnya.
#include <iostream>
struct Widget {
Widget() { std::cout << "born\n"; }
};
int main() {
Widget w; // constructor runs here
}Apabila Objek Dimusnahkan
Jangka hayat berakhir apabila pemusnah dijalankan. Bagi objek tindanan, perkara itu berlaku pada pendakap penutup skopnya.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget w;
std::cout << "alive\n";
} // ~Widget runs hereSusunan Pembinaan dan Pemusnahan
Objek dimusnahkan dalam susunan terbalik daripada pembinaannya. Objek yang dibina terakhir akan dirobohkan terlebih dahulu.
#include <iostream>
struct Tag {
int id;
Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
~Tag() { std::cout << "drop " << id << "\n"; }
};
int main() {
Tag a(1);
Tag b(2); // dropped before a
}Jangka Hayat Automatik (Tindanan)
Objek automatik hidup sepanjang tempoh blok yang mengandunginya. Ini ialah model jangka hayat yang paling lazim dan paling selamat.
Jangka Hayat Dinamik (Timbunan)
Objek timbunan yang dicipta dengan new hidup sehingga delete dipanggil — jangka hayatnya dikawal oleh Anda, bukannya oleh skop.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget* w = new Widget();
std::cout << "still alive\n";
delete w; // destructor runs here
}Jangka Hayat Statik
Objek dengan storan static hidup sepanjang keseluruhan program. Objek statik setempat fungsi dibina sekali apabila digunakan buat kali pertama.
#include <iostream>
int next() {
static int counter = 0; // built once
return ++counter;
}
int main() {
std::cout << next() << next() << next() << "\n";
}Objek Sementara
Objek sementara yang dicipta dalam suatu ungkapan biasanya dimusnahkan pada akhir ungkapan penuh (tanda koma bernoktah).
#include <iostream>
#include <string>
int main() {
std::cout << (std::string("a") + "b") << "\n";
} // temporary string dies after this lineAhli Dibina Sebelum Badan
Objek ahli bagi sesuatu kelas dibina sebelum badan pembina objek yang mengandunginya dijalankan, dan dimusnahkan selepas badan pemusnahnya selesai.
#include <iostream>
#include <string>
struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
Engine e;
Car() { std::cout << "car\n"; }
};
int main() { Car c; }Memanjangkan Jangka Hayat melalui Rujukan const
Mengikat objek sementara kepada const& memanjangkan jangka hayatnya supaya sepadan dengan rujukan tersebut — peraturan C++ yang berguna.
#include <iostream>
#include <string>
int main() {
const std::string& s = std::string("hi");
std::cout << s << "\n"; // s still valid
}Penggunaan Selepas Jangka Hayat Berakhir
Menyentuh objek selepas jangka hayatnya berakhir menghasilkan tingkah laku yang tidak ditakrifkan — pepijat klasik rujukan tergantung atau penggunaan selepas pembebasan.
Jangka Hayat Menggerakkan RAII
Oleh sebab pemusnah dicetuskan secara pasti pada akhir jangka hayat, C++ mengaitkan pembersihan sumber dengan jangka hayat — asas RAII yang akan dibincangkan dalam kursus seterusnya.
Semakan Pantas
Uji pemahaman Anda tentang jangka hayat objek.
Rumusan
Anda telah mempelajari cara jangka hayat objek bermula selepas pembinaan dan berakhir dengan pemusnahan. Objek automatik mengikut skop, objek dinamik mengikut new/delete, dan objek statik kekal sepanjang program. Pemusnahan berlaku dalam susunan terbalik — asas bagi RAII.
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 “Jangka Hayat Objek” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Jangka Hayat Objek”, 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 “Jangka Hayat Objek”?
Apabila objek dicipta dan dimusnahkan 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 “Jangka Hayat Objek” 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