Archief - C++: reference vraagje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JohnBeton

Legacy Member
Vind het niet meteen terug via google, dus stel de vraag hier.

Veronderstel volgende C++ code (ingekort, enkel relevante code weergegeven):
Code:
void enqueue(TypeX& t);
TypeX dequeue();


void doIt()
{
TypeX xToEnqueue;
enqueue(xToEnqueue);
}


TypeX doItAgain()
{
 TypeX tX = dequeue();
tX.doMethod();
return tX;
}

int main(void)
{
doIt();
//do alot more things
TypeX t2=doItAgain();
}
DoIt maakt dus een lokale var xToEnqueue aan, dewelke aan enqueue wordt gegeven.
Als er later in het programma doItAgain wordt opgeroepen, geeft dit dan de originele TypeX variabele terug? Of is de ondertussen (mogelijk) overschreven door de andere code die aan het draaien is?

Ik denk het 2e: xToEnqueue is immers een variabele die leeft op de stack: na het uitvoeren van enqueue wordt xToEnqueue gereleased & kan die overschreven worden door andere functie aanroepen. Of niet?

forloRn_

Legacy Member
xToEnqueue is onherroepelijk verloren wanneer doIt() returnt. Je queue houdt een kopie van xToEnqueue bij.

JohnBeton

Legacy Member
Zeker dat het een kopie is, als enqueue een referentie als parameter heeft?
Dat is toch ook een soort pointer?

forloRn_

Legacy Member
Als het geen kopie was, zou je reference ongeldig worden van zodra doIt() returnt.

Valt gemakkelijk te checken: print gewoon iets af in de copy constructor van je element en stop het element in je queue.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan