Másolás kivitelező, programozás C és C

A probléma az azonos típusú előfordulhat két esetben. Az első ilyen fordul elő, amikor a másolatot az objektum jön létre az átviteli függvényében az objektum érvként. A második eset akkor következik be, amikor az ideiglenes cél az, hogy hozzon létre egy függvényt, amely visszaadja egy objektum értékét. (Ne felejtsük el, hogy az ideiglenes objektumok automatikusan létrehozásra, benne a függvény visszatérési értéke, és ők is előállítható valamilyen más helyzetekben.)

classname (const classname o) // kivitelező szervezet
>

Inicializálás történik három esetben: ha egy tárgy inicializálja a másik, ha együtt Pius objektum adódik a funkciót, és ha csak egy időre helyet (általában, ha ez szolgál visszatérési érték). Például bármelyik alábbi állítások inicializálása:

MyClass x = y; // inicializálja
func (x); // átviteli paraméter
y = func (); // kap ideiglenes objektum

Az alábbiakban egy példát, ahol szükség explicit másolat kivitelező. Ez a program együttes çäàåò nagyon egyszerű „biztonságos” típusú tömb az egész számok, amely megakadályozza, hogy a termelés a széle-tzu tömb. Memóriát minden tömb az új üzemeltető által támogatott munka egy pointert a allokált memória kazh házon létesítmény.

/ * Ez a program létrehoz egy osztály a „biztonságos” tömb.
Mivel a helyet juttatott a tömb keresztül új, akkor a memória kiosztás az esetben, ha egy tárgy lehet inicializálni a másik, hogy a másolat kivitelező
* /
#include
#include
osztályú tömb int * p;
int mérete;
nyilvános:
array (int sz) p = új int [sz];
ha exit (1) (p!);
size = sz;
>

array ()
// másolni kivitelező
array (const tömb a);
void put (int i, int j), ha (i> = 0 én>
int get (int i) visszatérési p [i];
>
>;
/ / Másolás kivitelező
array :: array (array const a) int i;
p = új int [a.size];
ha exit (1) (p!);
for (i = 0; i>
int main ()
array NUM (10);
int i;
for (i = 0; i<10; i++) num.put(i, i);
for (i = 9; i> = 0; én--) cout < cout <<"\n";
// létrehoz egy másik tömb és kezdeti értékeit
NUM x tömb (num); // hívás copy konstruktor
for (i = 0; i<10; i++) cout < vissza 0;
>

A másolat kivitelező osztják csak elindulni. Például a következő inst ruktsii nem tartalmazhat felhívást másolat kivitelező:

és a tömb (10);
.
array b (10);
b = a; // copy konstruktor nem okoz

Ebben az esetben a b = és végrehajt egy hozzárendelés műveletet. Ha az = operátor nem túlterhelt, a bit-másolat lesz. Ezért bizonyos esetekben a rendszer újraindítása opera-tor = mellett másolatot készíthet kivitelező.

Kapcsolódó cikkek