Bahasa C
Pemahaman yang baik tentang bagaimana memori dinamis benar-benar bekerja di C++ sangat penting untuk menjadi programmer C++ yang baik. Memori dalam program C++ Anda dibagi menjadi dua bagian −
Tumpukan Semua variabel yang dideklarasikan di dalam fungsi akan mengambil memori dari tumpukan.
Tumpukan Ini adalah memori program yang tidak digunakan dan dapat digunakan untuk mengalokasikan memori secara dinamis saat program dijalankan.
Sering kali, Anda tidak mengetahui sebelumnya berapa banyak memori yang Anda perlukan untuk menyimpan informasi tertentu dalam variabel yang ditentukan dan ukuran memori yang diperlukan dapat ditentukan pada saat dijalankan.
Anda dapat mengalokasikan memori saat run time dalam heap untuk variabel dari tipe tertentu menggunakan operator khusus di C++ yang mengembalikan alamat ruang yang dialokasikan. Operator ini disebut baru operator.
Jika Anda tidak lagi membutuhkan memori yang dialokasikan secara dinamis, Anda dapat menggunakan delete operator, yang membatalkan alokasi memori yang sebelumnya dialokasikan oleh operator baru.
Berikut sintaks generik untuk menggunakan baru operator untuk mengalokasikan memori secara dinamis untuk semua tipe data.
new data-type;
Di sini, tipe data bisa berupa tipe data bawaan apa pun termasuk larik atau tipe data apa pun yang ditentukan pengguna termasuk kelas atau struktur. Mari kita mulai dengan tipe data bawaan. Misalnya kita dapat mendefinisikan pointer untuk mengetik ganda dan kemudian meminta agar memori dialokasikan pada waktu eksekusi. Kita dapat melakukan ini dengan menggunakan baru operator dengan pernyataan berikut
double* pvalue = NULL; // Pointer initialized with null pvalue = new double; // Request memory for the variable
Memori mungkin tidak berhasil dialokasikan, jika penyimpanan gratis telah habis. Jadi praktik yang baik untuk memeriksa apakah operator baru mengembalikan pointer NULL dan mengambil tindakan yang sesuai seperti di bawah ini −
double* pvalue = NULL; if( !(pvalue = new double )) { cout << "Error: out of memory." <<endl; exit(1); }
malloc() fungsi dari C, masih ada di C++, tetapi disarankan untuk menghindari penggunaan fungsi malloc(). Keuntungan utama dari new over malloc() adalah new tidak hanya mengalokasikan memori, tetapi juga membangun objek yang merupakan tujuan utama C++.
Kapan saja, ketika Anda merasa variabel yang telah dialokasikan secara dinamis tidak lagi diperlukan, Anda dapat mengosongkan memori yang ditempatinya di penyimpanan gratis dengan operator 'hapus' sebagai berikut −
delete pvalue; // Release memory pointed to by pvalue
Mari kita letakkan konsep di atas dan bentuk contoh berikut untuk menunjukkan cara kerja 'baru' dan 'hapus' −
Demo Langsung#include <iostream> using namespace std; int main () { double* pvalue = NULL; // Pointer initialized with null pvalue = new double; // Request memory for the variable *pvalue = 29494.99; // Store value at allocated address cout << "Value of pvalue : " << *pvalue << endl; delete pvalue; // free up the memory. return 0; }
Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut
Value of pvalue : 29495
Pertimbangkan Anda ingin mengalokasikan memori untuk array karakter, yaitu string 20 karakter. Menggunakan sintaks yang sama dengan yang kita gunakan di atas, kita dapat mengalokasikan memori secara dinamis seperti yang ditunjukkan di bawah ini.
char* pvalue = NULL; // Pointer initialized with null pvalue = new char[20]; // Request memory for the variable
Untuk menghapus array yang baru saja kita buat, pernyataan akan terlihat seperti ini
delete [] pvalue; // Delete array pointed to by pvalue
Mengikuti sintaks generik serupa dari operator baru, Anda dapat mengalokasikan untuk array multi-dimensi sebagai berikut −
double** pvalue = NULL; // Pointer initialized with null pvalue = new double [3][4]; // Allocate memory for a 3x4 array
Namun, sintaks untuk melepaskan memori untuk array multidimensi akan tetap sama seperti di atas −
delete [] pvalue; // Delete array pointed to by pvalue
Objek tidak berbeda dengan tipe data sederhana. Sebagai contoh, perhatikan kode berikut di mana kita akan menggunakan array objek untuk memperjelas konsep −
Demo Langsung#include <iostream> using namespace std; class Box { public: Box() { cout << "Constructor called!" <<endl; } ~Box() { cout << "Destructor called!" <<endl; } }; int main() { Box* myBoxArray = new Box[4]; delete [] myBoxArray; // Delete array return 0; }
Jika Anda mengalokasikan array empat objek Box, konstruktor Simple akan dipanggil empat kali dan sama halnya saat menghapus objek ini, destruktor juga akan dipanggil dengan jumlah yang sama.
Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut
Constructor called! Constructor called! Constructor called! Constructor called! Destructor called! Destructor called! Destructor called! Destructor called!
Bahasa C
Rekursi C++ Dalam tutorial ini, kita akan belajar tentang fungsi rekursif di C++ dan cara kerjanya dengan bantuan contoh. Fungsi yang memanggil dirinya sendiri dikenal sebagai fungsi rekursif. Dan, teknik ini dikenal sebagai rekursi. Kerja Rekursi di C++ void recurse() { ... .. ... recurs
Operator C++ Kelebihan Beban Dalam tutorial ini, kita akan belajar tentang overloading operator dengan bantuan contoh. Dalam C++, kita dapat mengubah cara kerja operator untuk tipe yang ditentukan pengguna seperti objek dan struktur. Ini dikenal sebagai kelebihan operator . Misalnya, Misalkan kita
Warisan C++ Dalam tutorial ini, kita akan belajar tentang pewarisan dalam C++ dengan bantuan contoh. Pewarisan adalah salah satu fitur utama pemrograman berorientasi objek di C++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang ada (kelas dasar). Kelas turunan mewari
Sebelum Anda mempelajari alokasi Memori Dinamis C, mari kita pahami: Bagaimana Manajemen Memori di C bekerja? Saat Anda mendeklarasikan variabel menggunakan tipe data dasar, kompiler C secara otomatis mengalokasikan ruang memori untuk variabel dalam kumpulan memori yang disebut tumpukan . Misalnya