Kezdőoldal » Számítástechnika » Programozás » C++-ban ha a visszatérő érték...

C++-ban ha a visszatérő érték egy új objektum, akkor az hogy nem szűnik meg a visszatérés pillanatában?

Figyelt kérdés

Pl. ha így néz ki egy osztály tagfüggvénye:


string Class::toStr() {

return string("xyz");

}

...

Class obj;

cout << obj.tostr();


Ilyenkor az új string objektum hogyan létezhet a hívó oldalon, amikor a hívott függvényen belül jött létre?



2013. nov. 19. 13:33
 1/7 A kérdező kommentje:

De így is működik:


string Class::toStr() {

string s("xyz");

return s;

}


Csak nem értem, miért. :(

2013. nov. 19. 13:40
 2/7 Csxeba ***** válasza:
0%
Miért szűnne meg? Rendelj hozzá egy változót és már el is "kaptad" :D Ha semmilyen változót, pointert, akármit nem rendelsz hozzá akkor szimplán létrejön a memóriában és utána nem mutat rá semmi
2013. nov. 19. 14:09
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
0%
Az a return dolga, hogy visszaadja, nem? Ha megszűnne, értelmetlen lenne az egész...
2013. nov. 19. 14:13
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
a blokkon belül megszűnik, nem értem mit értetlenkedsz. meghívod a függvényt ami visszatér egy értékkel ez teljesen helyén van
2013. nov. 19. 14:31
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

Nem lettem sokkal okosabb a válaszoktól, de közben én is keresgéltem, és itt egy kicsit jobban kifejtik:

[link]

2013. nov. 19. 16:32
 6/7 iostream ***** válasza:
100%

A linked elég jól elmondja. Amikor létrehozol egy stringet, az a }-nél megszűnik, de a return dolga, hogy visszaadjon egy másolatot. Ez a másolat a hívás helyén mint a függvény értékét jelképező temporális objektum jelenik meg, a temporális objektumok pedig a kifejezés végéig (gyakorlatilag az első ;-ig) élnek.


Tehát a te példádban a

cout << obj.toStr();

így egyben a kifejezés, és a toStr által gyártott string MÁSOLATA egész a végéig él.

Ha referenciát adnál vissza, tehát a toStr visszatérési értéke const string& lenne (sima string& nem jó, mert a temporálisra (ez most egy másik temporális, a string("xyz") kifejezés eredményezte temporális) nem állíthatsz nem-const referenciát), akkor valóban gond lenne: a toStr lefutásakor megszűnne a referált objektum, és a cout már csak egy leölt stringet próbálna kiírni.

2013. nov. 19. 17:02
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Ez egy korrekt válasz, köszönöm! :)
2013. nov. 19. 17:42

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!