Ik heb vaak dat een functie een object moet veranderen, maar dan een veranderde kopie moet teruggeven, en niet het origineel aanpassen.
Het meest simpele is:
Als ik nu ergens doe: MyClass b = PasObjectAan(a) worden er volgens mij drie kopieën gemaakt: bij het aanroepen van de functie, bij het returnen, en bij het assignen aan b.
De kopie bij het aanroepen kan worden vermeden door een const MyClass &x als parameter te gebruiken, alleen dan kun je x in de functie niet veranderen, dus moet je daar alsnog een kopie maken.
Mijn vraag is nu: als ik in die functie een kopie maak, hoe kan ik dan die kopie returnen zonder dat die bij het returnen nog een keer gekopieerd wordt, en bij het assignen (dus waar ik het resultaat van de functie uiteindelijk bewaar zeg maar) nóg een keer?
Een mogelijkheid is de functie een pointer laten returnen en dan in de functie een instantie new'en, maar ik wil graag geen pointer maar een normaal object returnen.
Een andere mogelijkheid is van het object waar ik uiteindelijk het resultaat in wil hebben (in het aanroep voorbeeld is dat b) een reference of pointer meegeven. De functie wordt dan void en schrijft het resultaat direct naar het uiteindelijke object. Maar da's ook zo lelijk, ik wil graag zoveel mogelijk die notatie van b = functie(a) aanhouden.
Ergens in de functie moet de instantie worden gemaakt die hij gaat returnen. Is er een mogelijkheid dat ik in de functie al bij die uiteindelijke return instantie kan komen? Of instantieert hij die pas op het eind?
Een reference returnen leek me ook niet de bedoeling, want als ik een tijdelijk object binnen de functie maak is die weer weg als hij de functie verlaat, en is die reference ongeldig.
Of kan ik toch iets doen van de vorm MyClass &b = PasObjectAan(a), en hoe moet die functie er dan precies uitzien?
Het meest simpele is:
code:
1
2
3
4
5
6
| MyClass PasObjectAan( MyClass x )
{
// doe iets met x
// (aangezien dit een kopie is wordt het origineel waarmee je de functie aanroept niet veranderd)
return x;
} |
Als ik nu ergens doe: MyClass b = PasObjectAan(a) worden er volgens mij drie kopieën gemaakt: bij het aanroepen van de functie, bij het returnen, en bij het assignen aan b.
De kopie bij het aanroepen kan worden vermeden door een const MyClass &x als parameter te gebruiken, alleen dan kun je x in de functie niet veranderen, dus moet je daar alsnog een kopie maken.
Mijn vraag is nu: als ik in die functie een kopie maak, hoe kan ik dan die kopie returnen zonder dat die bij het returnen nog een keer gekopieerd wordt, en bij het assignen (dus waar ik het resultaat van de functie uiteindelijk bewaar zeg maar) nóg een keer?
Een mogelijkheid is de functie een pointer laten returnen en dan in de functie een instantie new'en, maar ik wil graag geen pointer maar een normaal object returnen.
Een andere mogelijkheid is van het object waar ik uiteindelijk het resultaat in wil hebben (in het aanroep voorbeeld is dat b) een reference of pointer meegeven. De functie wordt dan void en schrijft het resultaat direct naar het uiteindelijke object. Maar da's ook zo lelijk, ik wil graag zoveel mogelijk die notatie van b = functie(a) aanhouden.
Ergens in de functie moet de instantie worden gemaakt die hij gaat returnen. Is er een mogelijkheid dat ik in de functie al bij die uiteindelijke return instantie kan komen? Of instantieert hij die pas op het eind?
Een reference returnen leek me ook niet de bedoeling, want als ik een tijdelijk object binnen de functie maak is die weer weg als hij de functie verlaat, en is die reference ongeldig.
Of kan ik toch iets doen van de vorm MyClass &b = PasObjectAan(a), en hoe moet die functie er dan precies uitzien?