0Pricing
C++ Academy · Ders

Taşıma Yapıcıları ve Taşıma Ataması

Taşıma yapıcılarını ve taşıma atama operatörlerini doğru şekilde uygulayın

Taşıma Yapıcıları ve Taşıma Ataması, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. 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.

İki Özel Üye

Taşıma kurucusu ve taşıma atama işleci, sınıfınızın başka bir örneğin kaynaklarının sahipliğini kopyalama yapmadan almasını sağlar.

İmza

İkisi de aynı tür için bir rvalue referansı alır.

class String {
public:
    String(String&& other) noexcept;          // move ctor
    String& operator=(String&& other) noexcept; // move assign
};

Taşıma Kurucusunu Uygulama

Kaynak nesnenin kaynaklarını alın ve onu geçerli, boş bir durumda bırakın.

String(String&& other) noexcept
    : data_(other.data_), size_(other.size_) {
    other.data_ = nullptr;
    other.size_ = 0;
}

Taşıma Atamasını Uygulama

Üç adım vardır: mevcut kaynakları serbest bırakın, kaynak nesnenin kaynaklarını alın ve kaynak nesneyi boş bırakın.

String& operator=(String&& other) noexcept {
    if (this != &other) {
        delete[] data_;
        data_ = other.data_;
        size_ = other.size_;
        other.data_ = nullptr;
        other.size_ = 0;
    }
    return *this;
}

noexcept Neden Önemlidir?

Taşıma işlemlerini mümkün olduğunda noexcept olarak işaretleyin. std::vector gibi standart kapsayıcılar, yeniden boyutlandırma sırasında taşıma işlemlerini yalnızca noexcept iseler kullanır; aksi hâlde özel durum güvenliği için kopyalamaya geri döner.

Beş Kuralı

Bu beş üyeden herhangi birini yazıyorsanız beşinin tamamını düşünün:

  • Yıkıcı
  • Kopya kurucusu
  • Kopya ataması
  • Taşıma kurucusu
  • Taşıma ataması

Sıfır Kuralı

Daha da iyisi, hiçbirini yazmayın. Üyeleri RAII türleri (vektörler, dizeler, akıllı işaretçiler) olarak saklayın. Derleyici tarafından oluşturulan varsayılanlar doğru ve verimli şekilde çalışır.

class Widget {
    std::string name_;
    std::vector<int> data_;
    // No need for destructor, copy, or move — compiler does the right thing
};

Derleyici Taşıma İşlemlerini Ne Zaman Üretir

Derleyici, varsayılan taşıma üyelerini yalnızca şu durumlarda üretir:

  • Kullanıcı tarafından bildirilmiş bir kopyalama kurucusu, kopyalama atama işleci, yıkıcı veya taşıma üyesi yoksa
  • Tüm üyeler ve temel sınıflar kendileri taşınabilir durumdaysa

Varsayılan ve Silinmiş Taşıma İşlemleri

Derleyici tarafından üretilen taşıma işlemlerini açıkça isteyebilir veya engelleyebilirsiniz.

class Widget {
public:
    Widget(Widget&&) = default;
    Widget& operator=(Widget&&) = default;
    // or
    Widget(Widget&&) = delete;
};

Taşıma İşleminden Sonra

Taşınan nesne geçerli ancak belirtilmemiş bir durumdadır. Şunları yapabilirsiniz:

  • Nesneyi yok etmek
  • Nesneye yeni bir değer atamak
  • Önkoşulu olmayan herhangi bir işlemi çağırmak (size(), empty(), clear())

Kullanım Alanları

Taşıma semantiği şu işlemleri hızlandırır:

  • Büyük nesneleri döndürmek (RVO devreye girmediğinde)
  • Büyük nesneleri kapsayıcılara yerleştirmek (rvalue'lar için push_back)
  • Kendi kaynak sahibi türlerinizi uygulamak

Hızlı Kontrol

Taşıma kurucuları ve taşıma atama işleçleri neden noexcept olarak işaretlenmelidir?

Özet

Taşıma kurucuları ve taşıma atama işleçleri, kısa süre içinde yok olacak bir rvalue'nun kaynaklarını devralır. Kapsayıcıların hızını artırmak için bunları noexcept olarak işaretleyin. Beşler Kuralı'nı veya daha iyisi, standart RAII türlerini birleştirerek Sıfırlar Kuralı'nı uygulayın.

Sıkça Sorulan Sorular

“Taşıma Yapıcıları ve Taşıma Ataması” dersi ücretsiz mi?

Evet — “Taşıma Yapıcıları ve Taşıma Ataması” 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.

“Taşıma Yapıcıları ve Taşıma Ataması” dersinde ne öğreneceğim?

Taşıma yapıcılarını ve taşıma atama operatörlerini doğru şekilde uygulayı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 4. dersidir.

“Taşıma Yapıcıları ve Taşıma Ataması” 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. Lvalue ve Rvalue Ayrımı
  2. Rvalue Referansları ve && Söz Dizimi
  3. std::move ve std::forward
  4. Taşıma Yapıcıları ve Taşıma Ataması
← C++ Academy Sayfasına Dön