Bellekte yer ayırmak için kullanıyoruz. Eeee daha önce bunu yapmıyor muyduk? Evet, OS bize bahçeli bir köy evi verdi. Ne güzel değil mi? Fakat artık biz bitki yetiştirmek istiyoruz ve dolayısıyla evin bahçesi bu iş için pek uygun değil. Dolayısıyla bize daha büyük alan lazım. Gidiyoruz OS’e diyoruz ki “Eyyy operating system bana tarla ver alan ver benim alana ihtiyacım var.” Eğer operating system lütfedip bu alanı verirse kullanıyoruz. Kısacası işletim sisteminden ek bellek talep edip bunu kullanmaya Dynamic Memory Allocation diyoruz. “Daynemik memori allokeyşın” bence gayet havalı bir isim.
Şimdi gelelim bunu nasıl kullanacağımıza. Havalı ismine rağmen basit bir kullanıma sahip. Memory Allocate etmek için new anahtar sözcüğünü kullanıyoruz. Deallocate etmek için delete anahtar sözcüğünü kullanıyoruz.
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
int* ptr_a = new int;
*ptr_a = 3;
cout << *ptr_a << endl; // 3
int* ptr_b = new int(5);
cout << *ptr_b << endl; // 5
delete ptr_a;
delete ptr_b;
ptr_a = nullptr;
ptr_b = nullptr;
}- Memory allocate ettikten sonra allocate edilen belleğin adresini bir pointera kaydettik. Yoksa kullanamazdık
- Deallocate etmek için atadığımız pointerı kullanıyoruz.
- Deallocate ettikten sonra pointerlara nullptr atıyoruz. Yani hiçbir şeyi point/işaret etmediğini gösteriyoruz. Bunu yapmak mecburi olmamakla beraber yapmak çoğu zaman iyidir. Yoksa bu pointer ilerde başa bela olabilir.
Bir de arrayleri allocate edebiliriz:
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
int* ptr = new int[5];
for (int i = 0; i < 5; i++)
ptr[i] = i * 3;
for (int i = 0; i < 5; i++)
cout << ptr[i] << endl;
delete[] ptr;
}
// Özet:
// int* ptr = new int[5];
// delete[] ptr;
// Çıktı:
// 0
// 3
// 6
// 9
// 12Çok bir fark yok sadece yanına [] geliyor. Gördüğünüz gibi. Tabi bunda pointera null atamadık. Allah sonumuzu hayır etsin.
Daha fazla bilgi ve düzgün anlatım için:

Leave a Reply