Sobes.tech
Middle

C++-da std::string tipli obyektin köçürülməsi zamanı nə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

std::string-in köçürülməsi zamanı, resursun (yaddaşın) mülkiyyəti mənbə obyektindən hədəf obyektə keçir. Sətirin məzmununu (simvolları) kopyalamaq əvəzinə, yalnız tampona işarə edən göstərici, onun ölçüsü və tutumu kopyalanır. Mənbə obyekt, etibarlı, lakin qeyri-müəyyən vəziyyətdə qalır (adətən, göstərici null olur və ölçü ilə tutum sıfırlanır), bu da iki dəfə yaddaşın sərbəst buraxılmasının qarşısını alır. Bu, tam kopyalamadan çox daha sürətlidir, xüsusən uzun sətirlər üçün.

#include <string>
#include <iostream>
#include <utility>

int main() {
    std::string original = "Çox uzun bir sətir, onu kopyalamaq istəmirsiniz";
    std::cout << "Əsas (köçürməzdən əvvəl): " << original << std::endl;

    // original-ı moved-ə köçürürük
    std::string moved = std::move(original);

    std::cout << "Köçürülmüş (köçürmədən sonra): " << moved << std::endl;
    // original indi etibarlı, lakin qeyri-müəyyən vəziyyətdədir.
    // Köçürmədən sonra original-ı istifadə etməyə çalışmaq qeyri-müəyyən davranışdır.
    // Ancaq, çoxlu tətbiqlər onu boş vəziyyətə gətirir.
    // std::cout << "Əsas (köçürmədən sonra): " << original << std::endl; // Təhlükəli!

    return 0;
}

Köçürmə konstrukturu və ya təyin etmə operatoru:

  • Hədəf obyektə tampon göstəricisini təyin edir.
  • Hədəf obyektə ölçü və tutumu təyin edir.
  • Mənbə obyektin tampon göstəricisini nullptr-ə təyin edir.
  • Mənbə obyektin ölçü və tutumunu 0-ə təyin edir.

Bu, köçürmə semantikasına (rvalue-istəklər və xüsusi konstrukturlar/operatorlar) görə həyata keçirilir.