Pemusnah Maya dalam C++

Pemusnah Maya Dalam C



C++ ialah bahasa yang digunakan untuk memberikan asas dalam konsep asas pengaturcaraan dan menjadikan pemikiran logik pengaturcara kuat. Dalam C++, OOP memainkan peranan penting kerana OOP ialah bahasa Berorientasikan Objek yang mencipta objek kelas. Dalam OOP, kami mengkaji kelas dan objek. Kelas mengandungi ahli data yang merupakan pembolehubah jenis yang berbeza dan fungsi ahli yang berbeza. Dengan bantuan contoh, kami mengakses data mana-mana kelas. Setiap kelas mempunyai pembina dan pemusnah apabila anda mencipta kelas. Pembina dipanggil sendiri apabila objek kelas itu dicipta. Kita juga boleh memulakan pembolehubah kelas di dalam pembina. Pemusnah juga dicipta secara automatik dengan pembina tetapi pemusnah memusnahkan objek dan ia adalah fungsi terakhir yang dipanggil sebelum memusnahkan objek. Nama kelas, contohnya kelas 'Profesi', dicipta. Pembinanya ialah Profession() dan pemusnah ialah ~Profession (). Mereka bertiga mempunyai nama yang sama.

Selepas bercakap tentang OOP, pembina dan pemusnah, mari kita bercakap tentang pemusnah maya. Pemusnah maya, seperti namanya, memusnahkan objek. Kami mempunyai kelas asas dan kelas terbitan yang diperoleh daripada kelas asas. Kedua-dua kelas mempunyai pembina dan pemusnah mereka. Pemusnah maya membebaskan ingatan yang diperuntukkan melalui objek kelas terbitan sambil memadamkan objek kelas terbitan menggunakan penuding kelas asas dengan kata kunci 'maya'.

Mengapa Kami Menggunakan Pemusnah Maya?

Apabila pelaksanaan fungsi ahli kelas dilakukan atau pelaksanaan kaedah main() hampir tamat, pemusnah dipanggil secara automatik untuk membebaskan memori yang diperuntukkan semasa penciptaan objek. Sekarang, mengapa kita menggunakan pemusnah maya? Apabila kelas asas dipadamkan yang menunjuk ke kelas terbitan, penunjuk (*) digunakan di sini. Pemusnah kelas asas hanya dipanggil semasa proses ini. Pemusnah kelas terbitan tidak dipanggil yang membawa kepada isu. Salah satunya ialah masalah kebocoran ingatan. Untuk mengelakkan isu ini dan menjadikan kod kami selamat, kami hampir memusnahkan objek untuk mengosongkan ruang memori yang diperuntukkan semasa penciptaan objek dengan memadamkan pemusnah kelas asas.

Contoh Asas C++ tanpa Pemusnah Maya

Mari lihat bagaimana program berfungsi tanpa pemusnah maya dengan program mudah yang memadamkan penunjuk.

Kod:

#include

menggunakan ruang nama std ;
kelas Induk_Kelas0
{
awam :
Induk_Kelas0 ( )
{ cout << 'Pembina Kelas Ibu Bapa' << endl ; }
~Kelas_Ibubapa0 ( )
{ cout << 'Pemusnah Kelas Ibu Bapa' << endl ; }
} ;
anak kelas_1 : Orang tua_Kelas0 awam
{
awam :
anak_1 ( )
{ cout << 'Pembina Kelas Kanak-kanak' << endl ; }
~Anak_1 ( )
{ cout << 'Pemusnah Kelas Kanak-kanak' << endl ; }
} ;
int utama ( )
{
Induk_Kelas0 * penunjuk = Kanak-kanak baru_1 ( ) ;
padam penunjuk ;
kembali 0 ;
}

Kod ini menerangkan cara kod dilaksanakan tanpa pemusnah maya. Pertama sekali, buat kelas bernama 'Parent_Class0' yang akan menjadi kelas induk. Di dalam kelas ini, cipta pembina dan pemusnah. Seperti yang kita tahu, pembina dan pemusnah dinamakan sama dengan kelas. Pemusnah diwakili sama dengan pembina tetapi ia mempunyai simbol (~) yang membezakannya daripada pembina. Di dalam pembina dan pemusnah, cetak mesej menggunakan 'cout<<'. Sekarang, buat kelas lain iaitu 'Child_1'. Kelas ini berasal daripada kelas induk, 'Parent_Class0'. Kelas terbitan mempunyai pembina dan pemusnahnya yang mengandungi mesej untuk dicetak pada skrin output.

Dalam kaedah main(), kami mencipta contoh 'Parent_Class0' dan menetapkan kelas terbitan kepadanya. Perkara penting yang perlu diingat dalam kes ini ialah kita menggunakan penunjuk untuk mendapatkan semula kelas induk. Apabila ia masuk ke dalam kelas induk, ia melaksanakan pembina kelas induk. Kemudian, ia pergi ke kelas kanak-kanak dan melaksanakan pembinanya. Sebelum melaksanakan pemusnah kelas kanak-kanak, ia perlu melaksanakan pemusnah kelas induk. Pengkompil melaksanakan pemusnah kelas induk dan menamatkan kelas tanpa melaksanakan pemusnah kelas kanak-kanak. Itulah masalahnya; ia tidak membebaskan ingatan kelas kanak-kanak. Ia mewakili pembina kelas induk, pembina kelas anak, dan pemusnah kelas induk. Itu menunjukkan bahawa pemusnah kelas kanak-kanak tidak dilaksanakan. Selepas pelaksanaan ini, kami memadamkan penunjuk dalam fungsi main().

Pengeluaran:

Contoh C++ dengan Pemusnah Maya

Mari kita bincangkan pemusnah maya dengan kod mudah untuk membezakan cara ia berfungsi dengan dan tanpa pemusnah maya.

Kod:

#include

menggunakan ruang nama std ;
kelas Induk_Kelas0
{
awam :
Induk_Kelas0 ( )
{ cout << 'Pembina Kelas Ibu Bapa' << endl ; }
maya ~Parent_Class0 ( )
{ cout << 'Pemusnah Kelas Ibu Bapa' << endl ; }
} ;
anak kelas_1 : Orang tua_Kelas0 awam
{
awam :
anak_1 ( )
{ cout << 'Pembina Kelas Kanak-kanak' << endl ; }
maya ~Anak_1 ( )
{ cout << 'Pemusnah Kelas Kanak-kanak' << endl ; }
} ;
int utama ( )
{
Induk_Kelas0 * penunjuk = Kanak-kanak baru_1 ( ) ;
padam penunjuk ;
kembali 0 ;
}

Program pertama menjelaskan masalah yang kami hadapi tanpa pemusnah maya. Sekarang, kod ini akan menyelesaikan masalah itu menggunakan pemusnah maya. Mula-mula, salin kod pertama dan tambahkan satu kata kunci di dua tempat dalam program ini. Perkataan itu adalah 'maya'. Masukkan perkataan ini dengan pemusnah kelas induk, 'Parent_Class0'. Begitu juga, sebutkan ini dengan pemusnah kelas kanak-kanak iaitu 'Child_1' yang diperoleh daripada kelas induk. Kata kunci 'maya' ini membuat sedikit perubahan dan ia melaksanakan pemusnah kelas kanak-kanak 'Child_1' terlebih dahulu. Kemudian, ia melaksanakan pemusnah kelas induk, 'Parent_Class0'. Selebihnya program beroperasi sama seperti ia beroperasi tanpa pemusnah maya. Dengan menambahkan sekeping kod kecil ini, kita boleh menyelamatkan ingatan kita daripada kebocoran. Kini, ia memaparkan empat mesej pada konsol. Pertama, pembina kelas induk, kemudian pembina kelas kanak-kanak, pemusnah kelas kanak-kanak, dan pemusnah kelas induk. Pada akhirnya, kami memadamkan penunjuk dalam kaedah main().

Pengeluaran:

C++ Contoh Pemusnah Maya Tulen

Dalam kod ini, kita akan bercakap tentang pemusnah maya tulen, cara ia berfungsi, dan bagaimana ia berbeza daripada pemusnah maya.

Kod:

#include

kelas Induk_0 {
awam :
maya ~Parent_0 ( ) = 0 ;
} ;
ibu bapa_0 :: ~Ibu bapa_0 ( )
{
std :: cout << 'Hello saya Pure Destructor. Anda Memanggil Saya!' ;
}
kelas Kanak-kanak_0 : awam Induk_0 {
awam :
~Anak_0 ( ) { std :: cout << 'Derived destructor ada di sini \n ' ; }
} ;

int utama ( )
{
ibu bapa_0 * ptr_0 = Kanak-kanak baru_0 ( ) ;
padam ptr_0 ;
kembali 0 ;
}

Kelas induk 'Parent_0' dibuat dalam langkah pertama kod. Di dalamnya, cipta pemusnah induk maya dan tetapkan ia dengan 0. Ini menetapkan pemusnah maya kepada pemusnah maya tulen yang bermaksud bahawa kelas induk kini abstrak dan kita tidak boleh mencipta kejadian kelas ini. Di luar kelas induk 'Parent_0', tentukan pemusnah dan std::cout. Teks yang diperlukan ditunjukkan dengan menggunakan std::cout. Kemudian, terbitkan kelas 'Child_0' daripada kelas induk dan tentukan pemusnahnya. Di dalam pemusnah, cetak mesej. Dalam fungsi main(), buat penunjuk kelas induk dan tetapkan kelas anak kepadanya.

Pengkompil pergi ke kelas induk 'Parent_0'. Apabila penunjuk dicipta, pembinanya dipanggil secara automatik. Kemudian, pengkompil masuk ke dalam kelas kanak-kanak untuk memanggil pembinanya. Selepas kejayaan pelaksanaan pembina, ia melaksanakan pemusnah kelas kanak-kanak 'Child_0'. Kemudian, ia melaksanakan pemusnah kelas induk. Dengan cara ini, kita boleh membuat pemusnah maya tulen. Ia tidak digalakkan untuk menggunakannya kerana dengan menggunakan kaedah ini, kelas induk menjadi abstrak yang menjadikannya tidak berguna. Metodologi yang kebanyakannya digunakan ialah pemusnah maya dan ia merupakan amalan yang baik.

Pengeluaran:

Kesimpulan

Kami belajar tentang pemusnah maya bermula daripada konsep OOP kepada bergerak ke arah pembina dan pemusnah. Selepas menerangkan semua ini, kami membincangkan tentang pemusnah maya secara terperinci dengan contoh pengekodan dan pemusnah maya tulen. Sebelum menerangkan pemusnah maya, kita mesti mengetahui tentang pembina, pemusnah, dan pewarisan. Dalam warisan, kami mewarisi kelas daripada kelas induk. Kelas kanak-kanak boleh lebih daripada satu tetapi kelas induk hanya satu. Pemusnah maya dan pemusnah maya tulen digunakan dalam warisan untuk menyelamatkan daripada kebocoran memori. Daripada contoh asas kepada contoh lanjutan, kami merangkumi semua yang anda perlu tahu untuk mula menggunakan dan memusnahkan memori kelas yang diperolehi.