Sobes.tech
Junior — Middle

Proqramlaşdırma dilində obyekt üçün kopyalama qurucusunun çağırılması hansı hallarda baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

C++ dilində, köçürmə qurucusu aşağıdakı hallarda çağrılır:

  • Eyni növ obyektlə başqa bir obyektlə başlanğıc verilərkən, məsələn:

    MyClass a;
    MyClass b = a; // köçürmə qurucusunun çağrılması
    
  • Ob'ekt dəyər kimi funksiyaya ötürülərkən:

    void func(MyClass obj) { /*...*/ }
    func(a); // çağırış zamanı obyektin kopyası
    
  • Funksiyadan dəyər kimi obyekt geri qaytararkən:

    MyClass func() {
      MyClass temp;
      return temp; // geri qaytararkən kopya
    }
    
  • Eyni növ obyektə təyin edilərkən (əgər təyin etmə operatoru istifadə olunmayıbsa):

    b = a; // burada təyin etmə operatoru çağrılır, köçürmə qurucusu deyil
    

Əhəmiyyətlidir ki, müasir tərtibçilər kopyalamağı optimallaşdıra bilərlər (Copy Elision), lakin konseptual olaraq, köçürmə qurucusu bu vəziyyətlərdə çağrılır.