Kell másolni a kivitelező a

A C ++, nem úgy, mint például a C # van fogalma a másolat kivitelező. Ez a szerkesztő nevezzük, amikor egy példányát egy tárgy egy osztály, amely inicializálja az új objektum azonos típusú. Ez a kivitelező neve, és a kevésbé nyilvánvaló esetekben, amikor a létrehozása egy ideiglenes másolatot egy tárgy.

Inicializ új objektum egy másik objektumot az azonos típusú

Például, inicializálása során egy objektum típusú Egy MyClassobektom Ugyanilyen típusú előfordul létre egy bitenkénti Az objektum másolata a Bc annak későbbi hozzárendelés tárgya A.

Engedje meg, hogy ClassName osztályt, amely megvalósítja a konstruktor és destruktor. A funkció mainsozdadim objektum típusát ClassName, ami hozzá egy új objektum azonos típusú:

A program eredményeként a következő lesz:

A kivitelező ebben az esetben csak egyszer kerül meghívásra, ha egy tárgy cname. De a destruktor fogják hívni a két entitás kitöltése során a program. És ez jó, ha a tárgyak nincsenek mutatók és dinamikus memória kiosztás. Azonban, ha van ilyen, akkor felugrik egy hiba a futás során. Ugyanilyen kellemetlen dolog történhet, amikor egy objektum mint argumentum, hogy egy függvény, és visszatér egy tárgyat a funkciót.

Paraméterátadás függvényében

Mint tudod, a C és C ++ alapértelmezett függvényargumentumok érték szerint adódnak át. Ezt kíséri létrehozása egy példányát az érv, amely részt vesz az összes kifejezést a funkció nem szabad megváltoztatni a változó átadták ezt a funkciót érvként. Egy-egy példányát megsemmisült, amikor elhagyja a hatálya alá a funkciót. Hagyja, például, van egy osztály ClassNames alapértelmezett konstruktor és destruktor; és funkcióját funkció (), amely átmegy egy objektum típusú ClassName:

Constructor nevezzük csak egyszer, amikor az objektum létrehozásakor, míg a destruktor neve kétszer - ha eltávolít másolatok és amikor eltávolítja az objektumot. Ha egy objektum vezetünk a funkciót értéket hoz létre ideiglenes bit-másolatát. Ha a forrás objektum egy olyan területen, az index, ami alatt kiadott a szükséges mennyiséget a kupac, akkor apránként ideiglenes másolatot is klónozni egy mutatót azonos memóriahely. Amikor a funkció másolatot az objektum megszűnik, hogy kiadja a memória területet mutatott a mutató. De destructor is jön a program befejezése, és elpusztítja a tárgy maga, átadjuk a funkciót, és a második alkalom, hogy engedje a már távoli emlék.

Visszaadja egy objektum a függvény

Visszatérés az objektum a függvény létrehoz egy ideiglenes másolatot a visszatérő bit-objektumot. Ehhez a függvény egy tárgyat, és azon belül kell végrehajtani nyilatkozat bevallásának, ami valójában visszaadja az érték az objektum. Nézzük ismét egy osztály ClassNames végrehajtott konstruktorok és a destruktor. Szintén lássuk függvény argumentum nélküli, de visszatér egy objektum típusú ClassName.

A program eredményeként a következő lesz:

Ebben az esetben a tervező aktiválódik kétszer - létrehozása során az objektum létrehozása során cnamei cname1. Úgy tűnik, hogy a destruktor volna dolgozni, és csak kétszer pusztulása két tárgy. De destruktorok három, nem kettő. Ez azért történt, mert a függvény visszatérési generált ideiglenes másolatot a visszaadott objektum. Hogy kellett volna rendelni a tárgyat, amelyik a visszatérési értéke a funkciót. És ez példányt a második a sorban megszünteti destruktor. Így ismét kap lehetőséget egyszer egy pointert az azonos régióban memóriát, ami szintén kell, hogy kiadja ugyanazt a memóriát kétszer.

A másolat kivitelező

copy konstruktor veszi paraméterként hivatkozás egy megváltoztathatatlan objektumot. Alkalmazzák ezt a kivitelező a klasseClassName például a helyzet az inicializálás egy tárgy.

következtetés

Lalka AlexVovolka ghostromaniv Eugene_V oxmap bahdannn ura_arendar ingwarsmith vadim092 iAndrew5 yrk93 JustPain ksune4ka_00x miha2227 mazahaka_tod NazarPalko serothim PetrenkoSergii

Kapcsolódó cikkek