0Pricing
C++ Academy · Ders

Üçlü/Beşli Kural

Kopyalama ve taşımayı doğru yönetin

Üçlü/Beşli Kural, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. 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.

Üç Kuralı

Bir sınıfın özel bir yıkıcıya ihtiyacı varsa neredeyse her zaman özel bir kopya kurucusuna ve kopya atamasına da ihtiyacı vardır. Bu üçü birlikte ele alınır.

Neden Üç

Ham bir kaynağı yöneten sınıf, kaynağın nasıl yok edileceğini, kopyalanacağını ve atanacağını tanımlamalıdır; aksi takdirde derleyicinin oluşturduğu sığ kopyalar çift serbest bırakmaya neden olur.

#include <iostream>

class Bad {
    int* p;
public:
    Bad(int v) : p(new int(v)) {}
    ~Bad() { delete p; }
    // default copy => two objects delete the same p!
};

Özel Kopya Kurucusu

Doğru bir kopya kurucusu, kaynağı paylaşmak yerine kendi kaynağını ayırarak derin kopyalama gerçekleştirir.

#include <iostream>

class Box {
    int* p;
public:
    Box(int v) : p(new int(v)) {}
    Box(const Box& o) : p(new int(*o.p)) {}   // deep copy
    ~Box() { delete p; }
    int get() const { return *p; }
};

int main() {
    Box a(5);
    Box b = a;   // independent copy
    std::cout << b.get() << "\n";
}

Özel Kopya Ataması

Kopya ataması eski kaynağı serbest bırakmalı, kendine atamaya karşı korunmalı ve yeni değeri derinlemesine kopyalamalıdır.

Box& operator=(const Box& o) {
    if (this != &o) {              // self-assignment guard
        delete p;
        p = new int(*o.p);
    }
    return *this;
}

Beş Kuralı

C++11, taşıma işlemlerini ekler. Beş işlemden herhangi birini (yıkıcı, kopya kurucusu, kopya ataması, taşıma kurucusu, taşıma ataması) tanımlarsanız hepsini tanımlamayı düşünün.

Taşıma Kurucusu

Bir taşıma kurucusu, kaynağı geçici bir nesneden devralır ve kaynak nesneyi boş bırakır; bu, kopyalamaktan çok daha ucuzdur.

Box(Box&& o) noexcept : p(o.p) {
    o.p = nullptr;   // source left empty
}

Taşıma Ataması

Taşıma ataması mevcut kaynağı serbest bırakır, ardından kaynak nesnenin kaynağının sahipliğini devralır.

Box& operator=(Box&& o) noexcept {
    if (this != &o) {
        delete p;
        p = o.p;
        o.p = nullptr;
    }
    return *this;
}

Taşımaları noexcept Olarak İşaretleme

Taşıma işlemleri noexcept olmalıdır; böylece std::vector gibi kapsayıcılar yeniden boyutlandırma sırasında bunları güvenle kullanabilir.

Sıfır Kuralı

En iyisi, ham hiçbir kaynağın sahibi olmamaktır. std::unique_ptr, std::vector veya std::string kullanırsanız beş işlemin hiçbirini tanımlamanız gerekmez; derleyicinin varsayılanları doğrudur.

#include <memory>

class Good {
    std::unique_ptr<int> p;   // owns the resource for you
public:
    Good(int v) : p(std::make_unique<int>(v)) {}
    // no destructor, no copy/move needed
};

İşlemleri Silme

Kopyalamanın anlamlı olmadığı durumlarda onu silin: Box(const Box&) = delete;. Böylece türü bilinçli olarak yalnızca taşınabilir veya kopyalanamaz hâle getirirsiniz.

Doğru Kuralı Seçme

Sıfır Kuralı'nı hedefleyin. Beş Kuralı'na yalnızca standart kitaplığın kapsamadığı ham bir kaynağı gerçekten sarmaladığınızda başvurun.

Hızlı Kontrol

Üç/Beş Kuralı konusundaki anlayışınızı sınayın.

Özet

Üç/Beş Kuralı'nı öğrendiniz: ham bir kaynağı yönetmek, yıkıcıyı, kopyalama ve taşıma işlemlerini tutarlı biçimde tanımlamayı gerektirir. Taşımaları noexcept olarak işaretleyin. En iyisi, standart RAII türlerini kullanarak ve hiçbirini tanımlamayarak Sıfır Kuralı'nı uygulamaktır.

Sıkça Sorulan Sorular

“Üçlü/Beşli Kural” dersi ücretsiz mi?

Evet — “Üçlü/Beşli Kural” 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.

“Üçlü/Beşli Kural” dersinde ne öğreneceğim?

Kopyalama ve taşımayı doğru 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 3. dersidir.

“Üçlü/Beşli Kural” 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