new/delete ile Öbek Ayırma
Dinamik belleği yönetin
new/delete ile Öbek Ayırma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
new ile Dinamik Bellek
new işleci bir nesne için öbekte (serbest depolama alanında) bellek ayırır ve nesneye bir işaretçi döndürür. Öbek nesneleri, belleği açıkça serbest bırakana kadar yaşar.
#include <iostream>
int main() {
int* p = new int(42); // heap allocation
std::cout << *p << "\n";
delete p; // release it
}delete ile Serbest Bırakma
Her new tam olarak bir delete ile eşleştirilmelidir. Bunu unutmak bellek sızıntısına yol açar; iki kez yapmak öbeği bozar.
#include <iostream>
int main() {
double* d = new double(3.5);
std::cout << *d << "\n";
delete d; // exactly once
}Diziler: new[] ve delete[]
Diziler için new[] ve buna karşılık gelen delete[] ifadelerini kullanın. new[] ile düz delete ifadesini eşleştirmek tanımsız davranıştır.
#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 [ ]
}Öbeği Neden Kullanmalı
Bir nesnenin onu oluşturan işlevden daha uzun yaşaması gerektiğinde veya boyutu yalnızca çalışma zamanında bilindiğinde öbeği kullanın. Aksi halde yığını tercih edin.
Öbek Ömrü Elle Yönetilir
Yığının aksine öbek nesneleri otomatik olarak serbest bırakmaz. Belleğin tam olarak ne zaman serbest bırakılacağını siz denetlersiniz ve bundan siz sorumlusunuz.
#include <iostream>
int* makeCounter() {
return new int(0); // survives the function
}
int main() {
int* c = makeCounter();
std::cout << *c << "\n";
delete c;
}delete Sonrasında İşaretçileri nullptr Olarak Ayarlayın
Sildikten sonra işaretçiyi nullptr olarak ayarlayın; böylece yanlışlıkla yeniden kullanmak, serbest bırakılmış belleğe dokunmak yerine belirgin bir hatayla başarısız olur.
#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";
}Bellek Ayırma Başarısız Olabilir
Sistemde bellek kalmadığında new, std::bad_alloc istisnasını fırlatır. Çok büyük bellek ayırmalarında bu gerçek bir olasılıktır.
Çalışma Zamanı Boyutlu Arabellekler
Öbek dizileri, çalışma zamanında hesaplanan bir boyutu kullanabilir; yığın dizileri bunu taşınabilir biçimde yapamaz.
#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;
}Akıllı İşaretçileri Tercih Edin
Modern C++, ham new/delete kullanımından kaçınır. std::unique_ptr ve std::make_unique, işaretçi kapsam dışına çıktığında belleği otomatik olarak serbest bırakır.
#include <iostream>
#include <memory>
int main() {
auto p = std::make_unique<int>(42);
std::cout << *p << "\n";
} // freed automaticallyÖbeğin Maliyeti
Öbek için bellek ayırmak yığından daha yavaştır: boş bir blok arar ve muhasebe bilgilerini günceller. Sık yapılan küçük bellek ayırmaları performansı düşürebilir.
Her new İşlemini Eşleştirin
Altın kural şudur: her new için bir delete, her new[] için bir delete[] gerekir. Daha iyisi, bunu sizin için akıllı işaretçilerin yapmasına izin vermektir.
Hızlı Kontrol
Öbek için bellek ayırma konusundaki anlayışınızı sınayın.
Özet
Öbekte new/new[] ile bellek ayırmayı ve delete/delete[] ile serbest bırakmayı öğrendiniz. Öbek nesneleri kapsamlarını aşar, ancak elle temizleme gerektirir. Her bellek ayırmayı eşleştirin, serbest bırakılan işaretçileri geçersiz duruma getirin ve modern kodda std::unique_ptr kullanmayı tercih edin.
Sıkça Sorulan Sorular
“new/delete ile Öbek Ayırma” dersi ücretsiz mi?
Evet — “new/delete ile Öbek Ayırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“new/delete ile Öbek Ayırma” dersinde ne öğreneceğim?
Dinamik belleği yönetin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“new/delete ile Öbek Ayırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yığın Ayırma
- new/delete ile Öbek Ayırma
- Nesne Ömrü
- Yaygın Bellek Hataları