CodeBlanks Logo Icon CodeBlanks

std::move

std::move ile taşıma semantiğini öğrenirsin.

std::move ile taşıma

std::move bir lvalue'yu rvalue'ya dönüştürür. Taşıma yapmaz; sadece taşıma yapılabilir hale getirir. #include <utility> başlığıyla gelir.

Örnek: std::string a = "Merhaba"; std::string b = std::move(a);. Burada std::move(a) ifadesi a'yı rvalue'ya çevirir ve std::string'in move constructor'ı çağrılır. b artık "Merhaba" içeriğine sahiptir; a geçerli ama belirsiz bir durumdadır (büyük olasılıkla boş). Bu, kopyalamadan hızlı içerik aktarımı sağlar.

std::move sonrası durum

std::move sonrası kaynak nesne geçerli ama belirsiz bir duruma gelir. İçeriği boşaltılmış olabilir; bu yüzden taşıma sonrası kaynak nesneyi kullanmamak gerekir.

Örnek: std::string a = "Merhaba"; std::string b = std::move(a); sonrasında a'ya güvenle yeni bir değer atayabilirsin: a = "Yeni";. Ama a'nın eski içeriğini okumamalısın. Bu, taşıma semantiğinin temel sözleşmesidir: kaynak nesne yok edilmez, sadece içeriği devredilir. Yeni değer atamak her zaman güvenlidir.

Uygulama std::move ile dizeyi taşı

Başlangıç kodunda a dizesi "Merhaba" 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 = "Merhaba";
    // 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 = "Merhaba";
    std::string b = std::move(a);
    std::cout << b;
    return 0;
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

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

1 Parçayı rolüne eşle

Kavram Anlamı
std::move lvalue'dan rvalue'ya
&& rvalue referans
#include <utility> Başlık dosyası
move constructor Kaynağı çalma

2 std::move çağrısını tamamla

Soru
std::string b = std::____(a);
Cevap
std::string b = std::move(a);

Açıklama: std::move lvalue'yu rvalue'ya çevirir.

3 std::move(a) ne yapar?

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

Açıklama: std::move a'yı rvalue'ya çevirir; taşıma sağlar.

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