Kezdőoldal » Számítástechnika » Programozás » Itt most milyen konstruktorhív...

Itt most milyen konstruktorhívás történik a new után? (C++)

Figyelt kérdés

ListaElem* p;

ListaElem* temp = new ListaElem(*p);


Azt odáig értem, hogy az = jelnél copy hívódik, de a new után milyen konstruktor hívódik??? Mert ugyan én ilyet nem írtam! (Egyébként kidebuggoltam, és a második sorban pontosan EGYSZER hívódik copy. )


2011. ápr. 5. 18:38
 1/3 A kérdező kommentje:

bocs, helyesen így néz ki:


ListaElem* p;

p= ertek; //értékadás

ListaElem* temp = new ListaElem(*p);


Milyen konstruktorhívás történik?

2011. ápr. 5. 19:09
 2/3 anonim ***** válasza:

No. Ha leírod ezt, hogy

class P

{

};


akkor automatikusan generál neked három függvényt:

P();

P(const P&);

~P();

Ha írsz bármilyen konstruktort ami nem egy darab const P& paramétert vesz át, akkor a P()-t nem generálja le, de a P(const P&)-t igen, ezt hívjuk másoló konstruktornak. A fordító által írt verzió azt csinálja, hogy az összes tagra meghívja a másolókonstruktort (összetett típus esetén) vagy simán bitre pontosan átmásolja (beépített típusnál).

Tehát pl


class asd

{

int x, y;

vector<int> z;

};


Az asd osztály (automatikusan generált) másoló konstruktora át fogja kopizni az x és az y értékét a paraméterül kapott objektumból az újonnan létrehozottba, és meghívja a saját tagvectorán a másoló konstruktort a kapott asd objektum vektorával, tehát kb ilyesmi kódot generál:


asd(const asd& oth): x(oth.x), y(oth.y), z(oth.z)

{}


A második kérdésedre pedig: a fordító egyrészt dönthet úgy, hogy nem hív meg feleslegesen függvényeket, optimalizál. Másrészt a temp egy pointer, aminek nincs konkrétan konstruktora (van neki, de semmiképp nem történik függvényhívás), tehát lekonsruálódik a ListaElem ojjektum, aztán annak a címe, amit visszaadott a new bemásolódik a tmp-be.

2011. ápr. 5. 19:59
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:
ez a kód a p által mutatott objektumot másolja át egy új objektumba, amire a temp mutat
2011. ápr. 10. 22:37
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!