Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara Pembuat dan Penghancur

Kadang-kadang diperlukan untuk menginisialisasi beberapa bagian dari suatu objek sebelum dapat digunakan. Misalnya, kami beroperasi pada stack, sebelum kami melakukan tindakan apa pun, bagian atas stack harus selalu disetel ke nol. Fitur inisialisasi otomatis ini dilakukan melalui 'Konstruktor'. Kemungkinan, jika suatu objek perlu mengeksekusi beberapa kode sebelum dihancurkan. Misalnya, jika suatu objek perlu menutup file yang telah dibuka, sebelum dihancurkan. Ini dapat dilakukan dengan bantuan 'Destructor'.

Mari kita ulas beberapa perbedaan dasar antara konstruktor dan destruktor dengan bantuan grafik perbandingan

Grafik perbandingan:

Dasar untuk perbandinganKonstruktorDestructor
Tujuan
Ini mengalokasikan memori ke suatu objek.Ini mengalokasikan memori suatu objek.
Pernyataanclass_name (argumen jika ada) {};~ class_name (tanpa argumen) {};
ArgumenKonstruktor menerima argumenDestructor tidak menerima argumen apa pun.
PanggilanKonstruktor dipanggil secara otomatis, sedangkan objek dibuat.Destructor dipanggil secara otomatis, ketika blok keluar atau program berakhir.
KerjaKonstruktor memungkinkan objek untuk menginisialisasi beberapa nilainya sebelum digunakan.Destructor memungkinkan objek untuk mengeksekusi beberapa kode pada saat kehancurannya.
Urutan eksekusi
Konstruktor disebut berurutan.
Destructor disebut dalam urutan terbalik dari konstruktor.
Dalam angkaMungkin ada beberapa konstruktor di kelas.Tetapi selalu ada destruktor tunggal di kelas.
Salin PembuatSalin konstruktor memungkinkan konstruktor untuk mendeklarasikan dan menginisialisasi objek dari objek lain.Tidak ada konsep seperti itu.
Over loadingKonstruktor dapat kelebihan beban.Destructor tidak dapat kelebihan beban.

Definisi Pembuat:

Konstruktor pada dasarnya adalah fungsi anggota kelas, yang menginisialisasi objek dan mengalokasikan memori untuknya. Konstruktor dapat dengan mudah diidentifikasi karena dideklarasikan dan didefinisikan dengan nama yang sama dengan kelas. Konstruktor tidak memiliki tipe pengembalian; jadi, mereka tidak mengembalikan apa pun, bahkan tidak 'batal'. Konstruktor selalu didefinisikan di bagian publik kelas.

Mungkin ada beberapa konstruktor di kelas; mereka dapat dibedakan berdasarkan jumlah dan jenis argumen yang disampaikan. Jika ada beberapa konstruktor di kelas; constructor implisit (do-nothing constructor) harus didefinisikan bersama mereka; tidak melakukan apa pun kecuali, memenuhi kompiler.

Konstruktor juga dapat didefinisikan dengan argumen default. Padahal, mereka juga menginisialisasi objek "secara dinamis". Konstruktor tidak dapat diwarisi, juga tidak bisa virtual tetapi, mereka dapat kelebihan beban. Mereka tidak dapat dirujuk ke alamat mereka.

Implementasi konstruktor:

 kelas Const {int a, b; public: Const () {// constructor tanpa parameter a = 0; b = 0; } Const (int c, int d) {// konstruktor dengan parameter a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // pernyataan ini memanggil konstruktor} 

Ketika C1 dibuat konstruktor tanpa parameter dieksekusi, karena C1 tidak lulus parameter apa pun. Sedangkan, ketika C2 dibuat konstruktor dengan parameter dieksekusi, karena melewati dua bilangan bulat ke konstruktor.

Definisi Destructor:

Destructor juga merupakan fungsi anggota dari suatu kelas, yang mengalokasikan memori yang dialokasikan untuk suatu objek. Ini didefinisikan dengan nama yang sama dengan kelas, didahului dengan simbol tilde (~). Destructors selalu disebut dalam urutan terbalik dari konstruktor.

Selalu ada destruktor tunggal di kelas, karena tidak menerima argumen apa pun. Objek lokal dihancurkan segera setelah kontrol eksekusi meninggalkan blok; di sisi lain, objek global dihancurkan ketika seluruh program berakhir. Destuctor secara implisit disebut oleh kompiler. Jika kelas diwarisi, dan kelas berasal dari kelas induk dan kelas anak dan kelas induk memiliki destruktor; kemudian, destruktor dari kelas turunan disebut pertama, diikuti oleh destruktor dari kelas induk.

Implementasi Destructor:

 kelas Const {int a, b; public: Const (int c, int d) {// konstruktor dengan parameter. a = c; c = d; cout << "nilai a dan b adalah" < 

Ketika objek C1 dibuat, konstruktor dengan dua parameter tipe integer dipanggil dan anggota "a, b" diinisialisasi dan nilai "a, b" dicetak. Setelah itu destructor dipanggil dan mencetak pesan "objek C1 dihancurkan".

Perbedaan Utama Antara Konstruktor dan Destruktor

  1. Tujuan utama konstruktor adalah untuk mengalokasikan memori ke objek ketika mereka dibuat sedangkan, tujuan utama dari destruktor adalah untuk mendeallocate memori objek ketika dihancurkan.
  2. Konstruktor diperbolehkan untuk menerima argumen karena argumen dapat digunakan untuk menginisialisasi data anggota kelas. Destruktor tidak menerima argumen apa pun karena satu-satunya tugasnya adalah mendeallocate memori objek.
  3. Konstruktor dipanggil ketika sebuah objek dibuat. Di sisi lain, sebuah destruktor dipanggil ketika sebuah program dihentikan atau program keluar dari blok di mana objek dibuat.
  4. Konstruktor umumnya digunakan untuk menginisialisasi data anggota kelas sedangkan, destruktor digunakan untuk membiarkan objek melakukan beberapa tindakan sebelum dihancurkan.
  5. Konstruktor dieksekusi dalam urutan berurutan yang berarti jika ada kelas turunan yang mewarisi kelas dasar dan objek kelas turunan dibuat maka akan memanggil konstruktor kelas dasar terlebih dahulu dan kemudian konstruktor kelas turunan. Di sisi lain, destruktor dari kelas turunan disebut pertama dan kemudian kelas dasar itu berarti bahwa destruktor dijalankan dalam urutan terbalik dari konstruktor.
  6. Di kelas, mungkin ada banyak konstruktor yang diidentifikasi oleh argumen jumlah yang disahkan. Di kelas, hanya ada satu destruktor.
  7. Ada konsep copy constructor yang memungkinkan objek untuk diinisialisasi dari objek lain sedangkan destructor tidak memiliki konsep seperti itu.
  8. Konstruktor dapat kelebihan beban untuk melakukan tindakan yang berbeda di bawah nama konstruktor yang sama sedangkan, destruktor tidak dapat kelebihan beban.

Kesimpulan:

Selain kesamaan, bahwa konstruktor dan destruktor adalah fungsi anggota khusus kelas, dan memiliki nama yang sama, perbedaan mendasar di antara keduanya adalah, 'konstruktor' disebut pada saat alokasi memori dan 'destruktor' disebut pada waktu alokasi memori objek. Keduanya, konstruktor dan destruktor secara implisit dipanggil oleh kompiler meskipun mereka tidak didefinisikan di kelas.

Top