Sobes.tech
Junior — Middle

Milyen esetekben történik a másoló konstruktor hívása egy programozási nyelvben?

sobes.tech MI

Válasz az MI-től

C++-ban a másoló konstruktor a következő esetekben hívódik:

  • Amikor egy objektumot ugyanazon típusú másik objektummal inicializálunk, például:

    MyClass a;
    MyClass b = a; // másoló konstruktor hívása
    
  • Amikor egy objektumot érték szerint adunk át egy függvénynek:

    void func(MyClass obj) { /*...*/ }
    func(a); // az objektum másolása a híváskor
    
  • Amikor egy objektumot érték szerint adunk vissza egy függvényből:

    MyClass func() {
      MyClass temp;
      return temp; // másolás visszatéréskor
    }
    
  • Amikor egy objektumot egy másiknak ugyanazon típusban érték szerint rendelünk hozzá (ha nem használjuk az értékadás operátort):

    b = a; // itt az értékadás operátor hívódik, nem a másoló konstruktor
    

Fontos megjegyezni, hogy a modern fordítók optimalizálhatják a másolást (Copy Elision), de elméletileg ezekben az esetekben a másoló konstruktor hívódik.