0Pricing
C++ Academy · Ders

Yıkıcılar ve Temizleme

Kaynakları otomatik olarak serbest bırakın

Yıkıcılar ve Temizleme, 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.

Bir Yıkıcı Ne Yapar

Yıkıcı, bir nesnenin lifetime süresi sona erdiğinde çalışır. Görevi, nesnenin sahip olduğu her şeyi serbest bırakmaktır. Yıkıcı ~ClassName şeklinde adlandırılır.

#include <iostream>

class File {
public:
    ~File() { std::cout << "closing file\n"; }
};

int main() {
    File f;
}   // ~File runs here

Sahip Olunan Belleği Serbest Bırakma

Bir sınıf öbek belleğine sahipse yıkıcısı bu belleği serbest bırakmalıdır. delete çağrısının yapılacağı klasik yer burasıdır.

#include <iostream>

class Buffer {
    int* data;
public:
    Buffer(int n) : data(new int[n]) {}
    ~Buffer() { delete[] data; }   // cleanup
};

int main() { Buffer b(10); }

Yıkıcılar Otomatik Çalışır

Yığın nesneleri için yıkıcıları kendiniz çağırmazsınız; derleyici çağrıyı kapsamın sonunda ekler.

Üyelerin Ters Sırası

Üye nesneleri, yıkıcı gövdesi çalıştıktan sonra bildirilme sıralarının tersine yok edilir.

#include <iostream>

struct A { ~A() { std::cout << "~A\n"; } };
struct B { ~B() { std::cout << "~B\n"; } };
struct C {
    A a;
    B b;          // destroyed before a
    ~C() { std::cout << "~C\n"; }
};

int main() { C c; }

Sanal Yıkıcılar

Türetilmiş bir nesneyi temel bir işaretçi üzerinden silerseniz temel sınıfın yıkıcısı virtual olmalıdır; aksi takdirde türetilmiş bölümde bellek sızıntısı oluşur.

#include <iostream>

struct Base {
    virtual ~Base() { std::cout << "~Base\n"; }
};
struct Derived : Base {
    ~Derived() override { std::cout << "~Derived\n"; }
};

int main() {
    Base* p = new Derived();
    delete p;   // both run thanks to virtual
}

Yıkıcılar Özel Durum Fırlatmamalı

Yığın çözülürken bir yıkıcıdan özel durum fırlatılması programı sonlandırır. Yıkıcılar (örtük olarak) noexcept olarak işaretlenmeli ve özel durumların dışarı çıkmasına asla izin vermemelidir.

Varsayılan Yıkıcı

Hiç yıkıcı yazmazsanız derleyici, her üyeyi yok eden bir yıkıcı oluşturur. Yalnızca RAII üyeleri içeren sınıflar için bu tam olarak doğru davranıştır.

#include <string>
#include <vector>

struct Record {
    std::string name;          // self-cleaning
    std::vector<int> values;   // self-cleaning
};   // default destructor is enough

= default Yıkıcısı

Derleyici tarafından oluşturulan yıkıcıyı açıkça istemek için ~Class() = default; yazın; özel mantığa gerek duymadan sanal bir yıkıcıya ihtiyaç duyduğunuzda bu kullanışlıdır.

#include <iostream>

struct Shape {
    virtual ~Shape() = default;   // virtual + default
};

Bellek Dışı Kaynakları Serbest Bırakma

Yıkıcılar yalnızca belleği serbest bırakmaz; dosyaları kapatır, kilitleri serbest bırakır ve soket bağlantılarını da keser. Edinilen her kaynak burada ele alınmalıdır.

Nesneler Arasındaki Sıra

Birden çok yerel nesne, oluşturulma sırasının tersine yok edilir; bu nedenle bir yıkıcı, kendisinden önce oluşturulan nesneleri güvenle kullanabilir.

work İşini RAII Üyelerine Bırakın

Her üye bir RAII türüyse çoğu zaman özel bir yıkıcıya hiç ihtiyacınız olmaz. Elle yazılmış yıkıcıları ham kaynaklar için saklayın.

Hızlı Kontrol

Yıkıcılar konusundaki anlayışınızı sınayın.

Özet

Yıkıcıların sahip olunan kaynakları lifetime sonunda otomatik olarak serbest bıraktığını, üyeleri bildirilme sırasının tersine çalıştırdığını ve özel durum fırlatmaması gerektiğini öğrendiniz. Çok biçimli temel sınıflarda yıkıcıların virtual olması gerekir. RAII üyeleri çoğu zaman özel yıkıcıları gereksiz kılar.

Sıkça Sorulan Sorular

“Yıkıcılar ve Temizleme” dersi ücretsiz mi?

Evet — “Yıkıcılar ve Temizleme” 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.

“Yıkıcılar ve Temizleme” dersinde ne öğreneceğim?

Kaynakları otomatik olarak serbest bırakın 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.

“Yıkıcılar ve Temizleme” 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. RAII İlkesi
  2. Yıkıcılar ve Temizleme
  3. Üçlü/Beşli Kural
  4. Kapsam Koruyucuları
← C++ Academy Sayfasına Dön