Pengurusan Memori C ++: baru dan hapus

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

C ++ membolehkan kita memperuntukkan memori pemboleh ubah atau array dalam jangka masa. Ini dikenali sebagai peruntukan memori dinamik.

Dalam bahasa pengaturcaraan lain seperti Java dan Python, penyusun secara automatik menguruskan memori yang diperuntukkan kepada pemboleh ubah. Tetapi ini tidak berlaku di C ++.

Dalam C ++, kita perlu mengalihkan memori yang diperuntukkan secara dinamik secara manual setelah kita tidak menggunakan pemboleh ubah tersebut.

Kita boleh memperuntukkan dan kemudian mengalihkan memori secara dinamik menggunakan operator newdan deletemasing-masing.

C ++ Pengendali baru

The newoperator memperuntukkan memori untuk pembolehubah. 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 memperuntukkan memori secara dinamik untuk intpemboleh ubah menggunakan newoperator.

Perhatikan bahawa kita telah menggunakan pointer pointVar untuk mengalokasikan memori secara dinamik. Ini kerana newpengendali mengembalikan alamat lokasi memori.

Dalam kes array, newpengendali mengembalikan alamat elemen pertama array.

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

 pointerVariable = new dataType;

padam Operator

Apabila kita tidak perlu lagi menggunakan pemboleh ubah yang telah kita nyatakan secara dinamik, kita boleh mengalihkan memori yang ditempati oleh pemboleh ubah tersebut.

Untuk ini, deletepengendali digunakan. Ia mengembalikan memori ke sistem operasi. Ini dikenali sebagai pembuangan memori .

Sintaks untuk pengendali ini adalah

 delete pointerVariable;

Pertimbangkan kodnya:

 // 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 memperuntukkan memori secara dinamik untuk intpemboleh ubah menggunakan pointer pointVar.

Setelah mencetak kandungan pointVar, kami membuang memori menggunakan delete.

Catatan : Sekiranya program menggunakan sejumlah besar memori yang tidak diingini menggunakan new, sistem mungkin rosak kerana tidak akan ada memori yang tersedia untuk sistem operasi. Dalam kes ini, deletepengendali dapat membantu sistem dari kemalangan.

Contoh 1: Peruntukan Memori Dinamik C ++

 #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; )

Pengeluaran

 45 45.45

Dalam program ini, kami mengalokasikan memori secara dinamik kepada dua pemboleh ubah intdan floatjenis. Setelah memberikan nilai kepada mereka dan mencetaknya, akhirnya kami mengalihkan ingatan menggunakan kod tersebut

 delete pointInt, pointFloat;

Catatan: Peruntukan memori dinamik dapat menjadikan pengurusan memori lebih cekap.

Terutama untuk tatasusunan, di mana banyak kali kita tidak mengetahui ukuran susunan hingga masa berjalan.

Contoh 2: C ++ baru dan hapus Operator untuk Susunan

 // 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; )

Pengeluaran

Masukkan jumlah pelajar: 4 Masukkan IPK pelajar. Pelajar1: 3.6 Pelajar2: 3.1 Pelajar3: 3.9 Pelajar4: 2.9 Mempamerkan IPK pelajar. Pelajar1: 3.6 Pelajar2: 3.1 Pelajar3: 3.9 Pelajar4: 2.9

Dalam program ini, kami telah meminta pengguna memasukkan bilangan pelajar dan menyimpannya dalam pemboleh ubah angka.

Kemudian, kami telah memperuntukkan memori secara dinamik untuk floatarray menggunakan baru.

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

Setelah kita tidak lagi memerlukan array, kita mengalihkan memori array menggunakan kod delete () ptr;.

Perhatikan penggunaan ()selepas delete. Kami menggunakan tanda kurung siku ()untuk menunjukkan bahawa penumpuan 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 menarik...