0Pricing
C++ Academy · Pelajaran

Alokasi Heap dengan new/delete

Kelola memori dinamis

Alokasi Heap dengan new/delete adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Memori Dinamis dengan new

Operator new mengalokasikan objek pada memori dinamis (penyimpanan bebas) dan mengembalikan pointer ke objek tersebut. Objek pada memori dinamis tetap ada sampai Anda membebaskannya secara eksplisit.

#include <iostream>

int main() {
    int* p = new int(42);   // heap allocation
    std::cout << *p << "\n";
    delete p;               // release it
}

Membebaskan dengan delete

Setiap new harus dipasangkan dengan tepat satu delete. Jika lupa menggunakannya, terjadi kebocoran memori; jika menggunakannya dua kali, memori dinamis akan rusak.

#include <iostream>

int main() {
    double* d = new double(3.5);
    std::cout << *d << "\n";
    delete d;     // exactly once
}

Larik: new[] dan delete[]

Untuk larik, gunakan new[] dan pasangan delete[]. Mencampurkan new[] dengan delete biasa merupakan perilaku tak terdefinisi.

#include <iostream>

int main() {
    int* arr = new int[3]{1, 2, 3};
    for (int i = 0; i < 3; ++i) std::cout << arr[i] << "\n";
    delete[] arr;   // note the [ ]
}

Mengapa Menggunakan Memori Dinamis?

Gunakan memori dinamis ketika objek harus bertahan lebih lama daripada fungsi yang membuatnya, atau ketika ukurannya baru diketahui saat program berjalan. Jika tidak, pilih tumpukan.

Masa Hidup Memori Dinamis Diatur Manual

Berbeda dari tumpukan, memori dinamis tidak membebaskan objek secara otomatis. Anda mengendalikan kapan tepatnya memori dibebaskan—dan Anda bertanggung jawab atasnya.

#include <iostream>

int* makeCounter() {
    return new int(0);   // survives the function
}

int main() {
    int* c = makeCounter();
    std::cout << *c << "\n";
    delete c;
}

Atur Pointer Menjadi nullptr Setelah delete

Setelah menghapus objek, atur pointer menjadi nullptr agar penggunaan kembali secara tidak sengaja gagal dengan jelas, bukan menyentuh memori yang sudah dibebaskan.

#include <iostream>

int main() {
    int* p = new int(9);
    delete p;
    p = nullptr;     // now p is safe to check
    if (!p) std::cout << "freed\n";
}

Alokasi Dapat Gagal

Jika sistem kehabisan memori, new melempar std::bad_alloc. Untuk alokasi yang sangat besar, hal ini benar-benar mungkin terjadi.

Buffer Berukuran Saat Program Berjalan

Larik pada memori dinamis dapat menggunakan ukuran yang dihitung saat program berjalan—sesuatu yang tidak dapat dilakukan larik tumpukan secara portabel.

#include <iostream>

int main() {
    int n = 5;
    int* buf = new int[n];
    for (int i = 0; i < n; ++i) buf[i] = i * i;
    std::cout << buf[4] << "\n";
    delete[] buf;
}

Utamakan Pointer Cerdas

C++ modern menghindari new/delete mentah. std::unique_ptr dan std::make_unique membebaskan memori secara otomatis saat pointer keluar dari lingkup.

#include <iostream>
#include <memory>

int main() {
    auto p = std::make_unique<int>(42);
    std::cout << *p << "\n";
}   // freed automatically

Biaya Memori Dinamis

Alokasi memori dinamis lebih lambat daripada alokasi tumpukan: alokasi ini mencari blok kosong dan memperbarui pencatatan internal. Alokasi kecil yang sering dilakukan dapat menurunkan kinerja.

Pasangkan Setiap new

Aturan utamanya: setiap new memerlukan satu delete, dan setiap new[] memerlukan satu delete[]. Lebih baik lagi, biarkan pointer cerdas menanganinya untuk Anda.

Pemeriksaan Singkat

Uji pemahaman Anda tentang alokasi memori dinamis.

Rangkuman

Anda telah mempelajari cara melakukan alokasi pada memori dinamis dengan new/new[] dan membebaskannya dengan delete/delete[]. Objek pada memori dinamis dapat bertahan melampaui lingkupnya, tetapi memerlukan pembersihan manual. Pasangkan setiap alokasi, jadikan pointer yang sudah dibebaskan bernilai null, dan utamakan std::unique_ptr dalam kode modern.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Alokasi Heap dengan new/delete” gratis?

Ya — teks lengkap “Alokasi Heap dengan new/delete” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Alokasi Heap dengan new/delete”?

Kelola memori dinamis Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Alokasi Heap dengan new/delete” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Alokasi Stack
  2. Alokasi Heap dengan new/delete
  3. Masa Hidup Objek
  4. Bug Memori yang Umum
← Kembali ke C++ Academy