CodeBlanks Logo Icon CodeBlanks

Özet - Move semantiği

std::move ve move ctor'u birleştirerek bir buffer sınıfı yazarsın.

Özet - Move semantiği

Bu grupta move semantiğini öğrendin. T&& rvalue referansı geçici değerlere bağlanır, std::move lvalue'yu rvalue'ya çevirir.

Move constructor T(T&&) yeni nesneye kaynak taşır, move assignment T& operator=(T&&) var olan nesneye taşır. Rule of five beş özel üyenin birlikte tanımlanmasını söyler. Şimdi iki ödevle öğrendiklerini pekiştireceksin: önce rvalue referans fonksiyonu, sonra std::move ile taşıma.

Uygulama rvalue referans fonksiyonu yaz

show adında bir fonksiyon tanımla: parametresi std::string&& s, gövdesi std::cout << s;. main içinde show("Merhaba"); çağır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>

// show fonksiyonunu tanımla

int main() {
    // show fonksiyonunu çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>

void show(std::string&& s) {
    std::cout << s;
}

int main() {
    show("Merhaba");
    return 0;
}

Beklenen çıktı

Merhaba

Uygulama std::move ile dizeyi taşı

Başlangıç kodunda a dizesi "Dünya" içeriyor. std::move ile a'nın içeriğini b'ye taşı ve b'yi std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <utility>

int main() {
    std::string a = "Dünya";
    // a'nın içeriğini b'ye taşı ve b'yi yazdır

    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <utility>

int main() {
    std::string a = "Dünya";
    std::string b = std::move(a);
    std::cout << b;
    return 0;
}

Beklenen çıktı

Dünya

Bölüm sonu

Move semantiğini tamamladın. Artık T&& rvalue referansını kullanabiliyor, std::move ile taşıma yapabiliyorsun.

Move constructor ve move assignment ile kaynakları verimli şekilde aktarıyorsun. Rule of five ve rule of zero ile ne zaman özel üye yazman gerektiğini biliyorsun. Sonraki grupta operatör aşırı yükleme konusunu işleyeceğiz; orada move assignment operatörünü de daha yakından göreceksin.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 std::move ne yapar?

main.cpp
std::string b = std::move(a);
  • a'yı siler
  • a'yı kopyalar
  • a'nın adresini verir
  • a'yı rvalue'ya çevirir Doğru cevap

Açıklama: std::move a'yı rvalue'ya çevirir.

2 rvalue referans parametresi

Soru
void show(std::string____ s) { std::cout << s; }
Cevap
void show(std::string&& s) { std::cout << s; }

Açıklama: && rvalue referans işaretidir.

Orta seviye bölümündeki tüm dersler