Memori dinamis dialokasikan menggunakan operator baru. Baru diikuti dengan data mengetik specifier dan, jika urutan lebih dari satu elemen diperlukan, jumlah ini dalam kurung []. Mengembalikan pointer ke awal baru blok memori yang dialokasikan. Syntax nya adalah:
pointer = tipe baru
pointer = tipe baru [number_of_elements]
Ekspresi pertama digunakan untuk mengalokasikan memori berisi satu elemen dari tipe tipe. Yang kedua digunakan untuk mengalokasikan blok (array) elemen jenis jenis, yang mana number_of_elements adalah nilai integer yang mewakili jumlah ini.
int * foo;
foo = new int [5];
Ada perbedaan besar antara menyatakan sebuah larik normal dan mengalokasikan memori dinamis untuk blok memori menggunakan baru. Yang paling penting perbedaan adalah bahwa ukuran array yang biasa perlu ekspresi konstan, dan dengan demikian ukurannya harus ditentukan pada saat merancang program, sebelum dijalankan, sedangkan alokasi memori dinamis dilakukan oleh baru memungkinkan untuk menetapkan memori selama runtime menggunakan nilai variabel sebagai ukuran.
Memori dinamis yang diminta oleh program kami dialokasikan oleh sistem dari tumpukan memori. Namun, memori komputer adalah sumber daya yang terbatas, dan itu dapat lelah. Oleh karena itu, ada tidak ada jaminan bahwa semua permintaan untuk mengalokasikan memori menggunakan operator baru akan diberikan oleh sistem.
C++ menyediakan dua standar mekanisme untuk memeriksa jika alokasi berhasil:
Salah satunya adalah dengan penanganan perkecualian. Menggunakan metode ini, pengecualian jenis bad_alloc dilemparkan ketika alokasi gagal. Pengecualian adalah fitur C++ yang kuat yang dijelaskan nanti dalam tutorial ini. Tetapi untuk sekarang, Anda harus tahu bahwa jika pengecualian ini dibuang dan tidak ditangani oleh seorang pawang tertentu, pelaksanaan program dihentikan.
Metode pengecualian ini adalah metode yang digunakan secara default oleh baru, dan satu yang digunakan dalam pernyataan seperti:
foo = new int [5];
Metode lain dikenal sebagai nothrow, dan apa yang terjadi bila digunakan adalah bahwa ketika alokasi memori gagal, bukan melemparkan bad_alloc pengecualian atau mengakhiri program, pointer dikembalikan oleh baru null pointer, dan program ini terus pelaksanaannya biasanya.
Metode ini dapat ditentukan dengan menggunakan objek khusus yang disebut nothrow, menyatakan di header <new>, sebagai argumen untuk yang baru:
foo = new (nothrow) int [5];
Metode nothrow ini mungkin untuk menghasilkan kode yang kurang efisien daripada pengecualian, karena itu menyiratkan secara eksplisit memeriksa nilai pointer kembali setelah setiap alokasi. Oleh karena itu, mekanisme pengecualian lebih umumnya dipilih, setidaknya untuk alokasi kritis. Namun, hampir semua contoh mendatang akan menggunakan mekanisme nothrow karena kesederhanaan.
Operators delete[]
Dalam kebanyakan kasus, memori dialokasikan secara dinamis hanya dibutuhkan selama periode tertentu waktu dalam sebuah program; setelah tidak lagi diperlukan, itu bisa dibebaskan sehingga memori menjadi tersedia lagi bagi permintaan lainnya dari memori dinamis. Ini adalah tujuan dari operator menghapus, sintaks yang:
delete pointer;
delete[] pointer;
delete[] pointer;
Contoh program menggunakan Dynamic Memorry.
0 comments:
Post a Comment