Podręcznik
Wersja podręcznika: 1.0
Data publikacji: 01.01.2022 r.
8. Funkcje
8.3. Zwracanie wyników z funkcji
Funkcja zwraca wyniki zazwyczaj poprzez return < wartość > , przy czym typ zwracanej wartości jest określony w nagłówku funkcji.
Do zwracania wyniku funkcji możemy wykorzystać każdą z metod omawianych wcześniej przy przekazywaniu argumentów. I podobnie jak wtedy - zwracanie dużych obiektów przez wartość, choć nie jest zalecane, nie stanowi problemu (zostanie wykonana kopia).
Lecz gdy zwracamy duże obiekty, i chcemy zrobić to elegancko, to mamy problem ... kto (funkcja? obiekt?) ma zarządzać czasem życia zwróconej wartości?
Jeśli typ zwracany jest typem podstawowym (lub typem niewielkich rozmiarów), to zwróćcie go po prostu przez wartość i nie zawracaj sobie głowy szczegółami. W pozostałych wypadkach macie do wyboru:
- Zwracamy obiekt tymczasowy (czyli przez wartość) – a wstyd i narzut czasowy trzeba zaakceptować...
- Zwracamy referencję do obiektu. Do jakiego? Nie może być to zmienna lokalna w funkcji ... mamy nadzieję że już rozumiecie dlaczego. Ale może do ... zmiennej statycznej w funkcji?. Sprytne, nie? Jednak unikajcie takich rozwiązań – mało intuicyjne, prowadzi do tworzenia zmiennych statycznych które wykorzystywane są niekoniecznie zgodnie z przeznaczeniem.
- Zwracamy wskaźnik do obiektu. W ten sposób należy jednak przyjąć prostą zasadę – tak zwracane są jedynie zmienne i obiekty tworzone dynamicznie, i odbiorca wyniku jest zobowiązany do usunięcia tego obiektu, przy czym jeszcze lepiej jest zmusić odbiorcę do skasowania obiektu dzięki odpowiednim wskaźnikom inteligentnym, np. unique_ptr
- Możecie też skorzystać z opisanej dalej w podręczniku semantyki przenoszenia.