Manajemen Memori C++:baru dan hapus
Manajemen Memori C++:baru dan hapus
Dalam tutorial ini, kita akan belajar mengelola memori secara efektif di C++ menggunakan operasi baru dan penghapusan dengan bantuan contoh.
C++ memungkinkan kita untuk mengalokasikan memori variabel atau array dalam waktu proses. Ini dikenal sebagai alokasi memori dinamis.
Dalam bahasa pemrograman lain seperti Java dan Python, kompiler secara otomatis mengelola memori yang dialokasikan ke variabel. Tapi ini tidak terjadi di C++.
Di C++, kita perlu membatalkan alokasi memori yang dialokasikan secara dinamis secara manual setelah kita tidak menggunakan variabel tersebut.
Kita dapat mengalokasikan dan kemudian membatalkan alokasi memori secara dinamis menggunakan new
dan delete
masing-masing operator.
Operator baru C++
new
operator mengalokasikan memori ke variabel. Misalnya,
// declare an int pointer
int* pointVar;
// dynamically allocate memory
// using the new keyword
pointVar = new int;
// assign value to allocated memory
*pointVar = 45;
Di sini, kami telah mengalokasikan memori secara dinamis untuk int
variabel menggunakan new
operator.
Perhatikan bahwa kita telah menggunakan pointer pointVar untuk mengalokasikan memori secara dinamis. Ini karena new
operator mengembalikan alamat lokasi memori.
Dalam kasus array, new
operator mengembalikan alamat elemen pertama larik.
Dari contoh di atas, kita dapat melihat bahwa sintaks untuk menggunakan new
operatornya adalah
pointerVariable = new dataType;
hapus Operator
Setelah kita tidak perlu lagi menggunakan variabel yang telah kita deklarasikan secara dinamis, kita dapat membatalkan alokasi memori yang ditempati oleh variabel tersebut.
Untuk ini, delete
operator digunakan. Ini mengembalikan memori ke sistem operasi. Ini dikenal sebagai dealokasi memori .
Sintaks untuk operator ini adalah
delete pointerVariable;
Perhatikan kodenya:
// declare an int pointer
int* pointVar;
// dynamically allocate memory
// for an int variable
pointVar = new int;
// assign value to the variable memory
*pointVar = 45;
// print the value stored in memory
cout << *pointVar; // Output: 45
// deallocate the memory
delete pointVar;
Di sini, kami telah mengalokasikan memori secara dinamis untuk int
variabel menggunakan pointer pointVar .
Setelah mencetak konten pointVar , kami membatalkan alokasi memori menggunakan delete
.
Catatan :Jika program menggunakan banyak memori yang tidak diinginkan menggunakan new
, sistem mungkin macet karena tidak ada memori yang tersedia untuk sistem operasi. Dalam hal ini, delete
operator dapat membantu sistem dari crash.
Contoh 1:Alokasi Memori Dinamis C++
#include <iostream>
using namespace std;
int main() {
// declare an int pointer
int* pointInt;
// declare a float pointer
float* pointFloat;
// dynamically allocate memory
pointInt = new int;
pointFloat = new float;
// assigning value to the memory
*pointInt = 45;
*pointFloat = 45.45f;
cout << *pointInt << endl;
cout << *pointFloat << endl;
// deallocate the memory
delete pointInt;
delete pointFloat;
return 0;
}
Keluaran
45
45.45
Dalam program ini, kami mengalokasikan memori secara dinamis ke dua variabel int
dan float
jenis. Setelah menetapkan nilai dan mencetaknya, kami akhirnya membatalkan alokasi memori menggunakan kode
delete pointInt;
delete pointFloat;
Catatan: Alokasi memori dinamis dapat membuat manajemen memori lebih efisien.
Khusus untuk array, dimana seringkali kita tidak mengetahui ukuran array hingga run time.
Contoh 2:C++ baru dan hapus Operator untuk Array
// C++ Program to store GPA of n number of students and display it
// where n is the number of students entered by the user
#include <iostream>
using namespace std;
int main() {
int num;
cout << "Enter total number of students: ";
cin >> num;
float* ptr;
// memory allocation of num number of floats
ptr = new float[num];
cout << "Enter GPA of students." << endl;
for (int i = 0; i < num; ++i) {
cout << "Student" << i + 1 << ": ";
cin >> *(ptr + i);
}
cout << "\nDisplaying GPA of students." << endl;
for (int i = 0; i < num; ++i) {
cout << "Student" << i + 1 << " :" << *(ptr + i) << endl;
}
// ptr memory is released
delete[] ptr;
return 0;
}
Keluaran
Enter total number of students: 4
Enter GPA of students.
Student1: 3.6
Student2: 3.1
Student3: 3.9
Student4: 2.9
Displaying GPA of students.
Student1 :3.6
Student2 :3.1
Student3 :3.9
Student4 :2.9
Dalam program ini, kami telah meminta pengguna untuk memasukkan jumlah siswa dan menyimpannya di num variabel.
Kemudian, kami telah mengalokasikan memori secara dinamis untuk float
larik menggunakan baru .
Kami memasukkan data ke dalam array (dan kemudian mencetaknya) menggunakan notasi pointer.
Setelah kita tidak lagi membutuhkan array, kita dealokasi memori array menggunakan kode delete[] ptr;
.
Perhatikan penggunaan []
setelah delete
. Kami menggunakan tanda kurung siku []
untuk menunjukkan bahwa dealokasi memori adalah array.
Contoh 3:C++ baru dan hapus Operator untuk Objek
#include <iostream>
using namespace std;
class Student {
int age;
public:
// constructor initializes age to 12
Student() : age(12) {}
void getAge() {
cout << "Age = " << age << endl;
}
};
int main() {
// dynamically declare Student object
Student* ptr = new Student();
// call getAge() function
ptr->getAge();
// ptr memory is released
delete ptr;
return 0;
}
Keluaran
Age = 12
Dalam program ini, kami telah membuat Student
kelas yang memiliki variabel pribadi usia .
Kami telah menginisialisasi usia ke 12
di konstruktor default Student()
dan cetak nilainya dengan fungsi getAge()
.
Di main()
, kami telah membuat Student
objek menggunakan new
operator dan gunakan pointer ptr untuk menunjuk ke alamatnya.
Saat objek dibuat, Student()
konstruktor menginisialisasi usia ke 12
.
Kami kemudian memanggil getAge()
fungsi menggunakan kode:
ptr->getAge();
Perhatikan operator panah ->
. Operator ini digunakan untuk mengakses anggota kelas menggunakan pointer.