Teknologi

Konstruktor yang Mengalokasikan Memori Secara Dinamis

Konstruktor dapat digunakan untuk menginisialisasi objek anggota serta mengalokasikan memori. Ini dapat memungkinkan suatu objek untuk menggunakan hanya sejumlah memori yang diperlukan segera. Alokasi memori ini pada saat run-time juga dikenal sebagai alokasi memori dinamis. baru operator yang digunakan untuk tujuan ini.

Contoh Program

Program di bawah ini menunjukkan penggunaan new di konstruktor kelas String sederhana.

/* * Program untuk mengilustrasikan penggunaan alokasi memori dinamis * dalam konstruktor * https://www.tech-faq.com */ #include #include class String { private: char *arr; ukuran int; publik: String():size(0) // Konstruktor no. 1 { arr = karakter baru[ukuran+1]; } String(char *s):size(strlen(s)) // Konstruktor no. 2 { arr = karakter baru[ukuran+1]; // satu byte tambahan untuk ‘ ‘ null terminator strcpy(arr, s); } void show() { std::cout << arr << std::endl; } void join(String &a, String &b) { size = a.size + b.size; hapus arr; arr = karakter baru[ukuran+1]; strcpy(arr, a.arr); strcat(arr, b.arr); } }; int main(void) { char *nama = “John Carry”; String nama1(nama); String nama2(“Tandai Kehendak”); String nama3(“Malcolm Marshall”); tali s1, s2; s1.join(nama1, nama2); //yaitu s1 = nama1 + nama2 s2.join(s1, nama3); nama1.tampilkan(); nama2.tampilkan(); nama3.tampilkan(); s1.tampilkan(); s2.tampilkan(); kembali 0; }

Keluaran

John Carry Mark Wills Malcolm Marshall John CarryMark Wills John CarryMark Wills Malcolm Marshall

Penjelasan

Dua konstruktor digunakan dalam program di atas. Yang pertama adalah konstruktor default (non-parameter) yang menginisialisasi ukuran ke 0 dan secara dinamis mengalokasikan 1 byte memori ke arr array char*. Konstruktor kedua menginisialisasi ukuran ke ukuran string yang dimasukkan oleh pengguna dan kemudian secara dinamis mengalokasikan ukuran +1 byte memori untuk arr. Perhatikan bahwa di sini kita telah menginisialisasi ukuran array arr dengan 1 byte lebih dari yang dimasukkan oleh pengguna; ini untuk membuat tempat untuk terminator nol (‘ ‘) atau karakter akhir string .

Dalam program di atas kita telah menggunakan fungsi library standar strcpy() dan strcat(). strcpy() menyalin string karakter dari satu lokasi memori ke lokasi lain dan strcat() menggabungkan dua string menjadi satu.

Fungsi anggota kelas join() menggabungkan dua string dan mengalokasikan hasilnya ke objek saat ini. Di main(), program menggunakan fungsi ini untuk menggabungkan tiga string.