C ++ Memory Management: baru dan hapus

Dalam tutorial ini, kita akan belajar mengelola memori secara efektif di C ++ menggunakan operasi baru dan hapus dengan bantuan contoh.

C ++ memungkinkan kita mengalokasikan memori variabel atau array dalam waktu proses. Ini dikenal sebagai alokasi memori dinamis.

Dalam bahasa pemrograman lain seperti Java dan Python, kompilator 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.

Kita dapat mengalokasikan dan kemudian melepas alokasi memori secara dinamis menggunakan operator newdan deletemasing-masing.

C ++ Operator baru

The newOperator mengalokasikan memori untuk variabel. Sebagai contoh,

 // 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 intvariabel menggunakan newoperator.

Perhatikan bahwa kita telah menggunakan pointer pointVar untuk mengalokasikan memori secara dinamis. Ini karena newoperator mengembalikan alamat lokasi memori.

Dalam kasus array, newoperator mengembalikan alamat elemen pertama dari array.

Dari contoh di atas, kita dapat melihat bahwa sintaks untuk menggunakan newoperator adalah

 pointerVariable = new dataType;

hapus Operator

Setelah kita tidak lagi perlu menggunakan variabel yang telah kita deklarasikan secara dinamis, kita dapat membatalkan alokasi memori yang ditempati oleh variabel tersebut.

Untuk ini, deleteoperator digunakan. Ini mengembalikan memori ke sistem operasi. Ini dikenal sebagai deallocation 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 intvariabel menggunakan pointer pointVar.

Setelah mencetak konten pointVar, kami membatalkan alokasi memori menggunakan delete.

Catatan : Jika program menggunakan sejumlah besar memori yang tidak diinginkan new, sistem mungkin macet karena tidak ada memori yang tersedia untuk sistem operasi. Dalam hal ini, deleteoperator dapat membantu sistem agar tidak crash.

Contoh 1: C ++ Dynamic Memory Allocation

 #include 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, pointFloat; return 0; )

Keluaran

 45 45.45

Dalam program ini, kami mengalokasikan memori secara dinamis ke dua variabel intdan floattipe. Setelah menetapkan nilai dan mencetaknya, kami akhirnya membatalkan alokasi memori menggunakan kode

 delete pointInt, pointFloat;

Catatan: Alokasi memori dinamis dapat membuat manajemen memori lebih efisien.

Khususnya untuk array, dimana seringkali kita tidak mengetahui ukuran dari array tersebut hingga waktu prosesnya.

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 #include using namespace std; int main() ( int num; cout <> 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 <> *(ptr + i); ) cout << "Displaying 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

Masukkan jumlah total siswa: 4 Masukkan IPK siswa. Mahasiswa1: 3.6 Mahasiswa2: 3.1 Mahasiswa3: 3.9 Mahasiswa4: 2.9 Menampilkan IPK mahasiswa. Siswa1: 3,6 Siswa2: 3,1 Siswa3: 3,9 Siswa4: 2.9

Dalam program ini, kami meminta pengguna untuk memasukkan jumlah siswa dan menyimpannya dalam variabel num.

Kemudian, kami telah mengalokasikan memori secara dinamis untuk floatarray menggunakan new.

Kami memasukkan data ke dalam array (dan kemudian mencetaknya) menggunakan notasi pointer.

Setelah kita tidak lagi membutuhkan array, kita membatalkan alokasi memori array menggunakan kode delete () ptr;.

Perhatikan penggunaan ()setelah delete. Kami menggunakan tanda kurung siku ()untuk menunjukkan bahwa deallocation memori adalah array.

Contoh 3: C ++ baru dan hapus Operator untuk Objek

 #include using namespace std; class Student ( int age; public: // constructor initializes age to 12 Student() : age(12) () void getAge() ( cout << "Age = " << age 

Output

 Age = 12

In this program, we have created a Student class that has a private variable age.

We have initialized age to 12 in the default constructor Student() and print its value with the function getAge().

In main(), we have created a Student object using the new operator and use the pointer ptr to point to its address.

The moment the object is created, the Student() constructor initializes age to 12.

We then call the getAge() function using the code:

 ptr->getAge();

Notice the arrow operator ->. This operator is used to access class members using pointers.

Artikel yang menarik...