0Pricing
C++ Academy · Ders

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

  1. Yığın Ayırma
  2. new/delete ile Öbek Ayırma
  3. Nesne Ömrü
  4. Yaygın Bellek Hataları
← C++ Academy Sayfasına Dön