Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

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.


Bahasa C

  1. Istilah dan Konsep Memori Digital
  2. Variabel C++, Literal dan Konstanta
  3. Kelas dan Objek C++
  4. C++ Warisan Publik, Dilindungi, dan Pribadi
  5. Fungsi teman C++ dan Kelas teman
  6. Direktori Python dan Manajemen File
  7. Struktur dan kelas dalam C++
  8. MODEL B RASPBERRY PI 3 BARU + FITUR DAN PEMBELIAN
  9. GE Digital Meluncurkan Perangkat Lunak Manajemen Aset Baru
  10. Robot Baru:Ekonomis dan Top-of-the-Line