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

Menguasai Manajemen Memori C++: Penggunaan Ahli new dan delete

Menguasai Manajemen Memori C++: Penggunaan Ahli new dan delete

Panduan ini menjelaskan cara mengalokasi dan membebaskan memori heap dalam C++ dengan new dan delete, diilustrasikan melalui contoh-contoh dunia nyata yang jelas.

C++ memberi pengembang kekuatan untuk mengalokasikan memori pada waktu runtime—disebut alokasi memori dinamis. Berbeda dengan bahasa terkelola seperti Java atau Python, C++ tidak secara otomatis mereclaim memori heap; programmer harus secara eksplisit membebaskannya.

Menggunakan operator new dan delete menyediakan mekanisme dasar untuk tugas ini. Operator ini adalah dasar manajemen memori manual dalam C++ dan didefinisikan dalam pustaka standar C++.


Operator new

Operator new mengalokasikan blok memori di heap dan mengembalikan pointer ke byte pertamanya. Misalnya:

// deklarasikan pointer int int* pointVar; // alokasikan memori secara dinamis menggunakan new pointVar = new int; // tetapkan nilai ke memori yang dialokasi *pointVar = 45;

Dalam cuplikan ini, pointVar menerima alamat dari int yang baru dialokasi. Karena new mengembalikan pointer, variabel harus bertipe pointer. Untuk array, new mengembalikan pointer ke elemen pertama:

int* arr = new int[10]; // arr menunjuk ke elemen pertama dari array 10 int 

Sintaks umum adalah:

pointerVariable = new dataType; // objek tunggal pointerVariable = new dataType[size]; // array 

Operator delete

Ketika objek atau array yang dialokasi dengan new tidak lagi diperlukan, delete harus dipanggil untuk melepaskan memori kembali ke sistem operasi. Gagal melakukannya menghasilkan kebocoran memori yang dapat menurunkan kinerja atau menyebabkan aplikasi crash.

Untuk objek tunggal:

delete pointerVariable;

Untuk array yang dialokasi dengan new[], gunakan bentuk array:

delete[] pointerVariable;

Contoh siklus hidup lengkap:

// alokasikan int int* pointVar = new int; *pointVar = 45; cout << *pointVar; // Output: 45 // dealokasi delete pointVar;

Tips: Pasangkan setiap new dengan delete yang sesuai (atau delete[] untuk array). Gunakan RAII atau smart pointer (misalnya, std::unique_ptr) untuk mengotomatisasi proses ini dalam kode produksi.


Contoh 1: Alokasi Dinamis Dasar

#include <iostream> using namespace std; int main() { int* pointInt; float* pointFloat; pointInt = new int; pointFloat = new float; *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; delete pointInt; delete pointFloat; return 0; }

Output

45 45.45

Program ini menunjukkan alokasi dua tipe primitif, penugasan, output, dan dealokasi yang bersih.

Catatan: Alokasi dinamis dapat meningkatkan fleksibilitas, terutama ketika ukuran ditentukan pada waktu runtime.


Contoh 2: Alokasi Array Float

#include <iostream> using namespace std; int main() { int num; cout << "Masukkan total jumlah siswa: "; cin >> num; float* ptr = new float[num]; cout << "Masukkan IPK siswa." << endl; for (int i = 0; i < num; ++i) { cout << "Siswa" << i + 1 << ": "; cin >> *(ptr + i); } cout << "\nMenampilkan IPK siswa." << endl; for (int i = 0; i < num; ++i) { cout << "Siswa" << i + 1 << " :" << *(ptr + i) << endl; } delete[] ptr; return 0; }

Output

Masukkan total jumlah siswa: 4 Masukkan IPK siswa. Siswa1: 3.6 Siswa2: 3.1 Siswa3: 3.9 Siswa4: 2.9 Menampilkan IPK siswa. Siswa1 :3.6 Siswa2 :3.1 Siswa3 :3.9 Siswa4 :2.9

Program meminta pengguna untuk jumlah siswa, mengalokasikan array float sesuai dengan itu, mengumpulkan input, menampilkan data, dan akhirnya membebaskan memori dengan delete[].


Contoh 3: Alokasi Dinamis Objek

#include <iostream> using namespace std; class Student { int age; public: Student() : age(12) {} void getAge() { cout << "Usia = " << age << endl; } }; int main() { Student* ptr = new Student(); ptr->getAge(); delete ptr; return 0; }

Output

Usia = 12

Contoh ini membuat objek Student di heap. Konstruktor menginisialisasi age ke 12, dan metode getAge mencetaknya. Setelah digunakan, delete melepaskan memori objek.

Bahasa C

  1. Dasar-Dasar Memori Digital: Alamat, Akses, dan Volatilitas
  2. Menguasai Variabel, Literal, dan Konstanta C++: Panduan Lengkap
  3. Kelas & Objek C++: Panduan Praktis Pemrograman Berorientasi Objek
  4. Menguasai Warisan C++: Public, Protected & Private Dijelaskan
  5. Fungsi Teman dan Kelas Teman C++: Menguasai Kontrol Akses
  6. Menguasai Operasi Direktori dan File di Python
  7. Struktur vs Kelas C++: Panduan Praktis untuk Pengembang Terintegrasi
  8. Raspberry Pi 3 B+ – Fitur Terbaru, Spesifikasi & Panduan Pembelian
  9. GE Digital Meluncurkan Perusahaan Manajemen Aset Prediktif, Mengubah Pemeliharaan dari Reaktif menjadi Proaktif
  10. Wittmann Battenfeld Perkenalkan Robot X Series dan Primus 14 Baru