Повернення значень
Функція може повертати результат у викликаючу програму за значенням або за посиланням. При поверненні за значенням відбувається фактично передача результату,а, отже, створюється копія об’єкту, який і повертається в програму. У викликаючій програмі цей новостворений об’єкт може присвоюватися якомусь іншому об’єкту чи використовуватися якось інакше. Якщо ж повертання відбувається за посиланням, ніякий новий об’єкт не створюється. Все, що повертається в якості результату – це посилання на вихідний об’єкт.
Функція operator=() повертає результат шляхом створення тимчасового об’єкта alpha та його ініціалізації за допомогою одноаргументного конструктора у виразі
return alpha(data);
Значення, що повертається – це копія вихідного, а не той сам об’єкт, чиїм методом є перезавантажувана операція =. Такий стиль повернення значень дозволяє вибудовувати ці функції в ланцюжок:
а3=а2=а1;
Це добре, але повернення результату за значенням має ті ж недоліки, що й передача за значенням. Насамперед, це створення в пам’яті копії повернутого об’єкту, що може призвести до певної плутанини. А чи можна повернути результат за посиланням, використовуючи описувач такого типу:
alpha& operator=(alpha& a)
На жаль ні, ми не можемо повернути результат за посиланням при роботі з локальними змінними даної функції.
Локальні змінні, тобто створені всередині функції і не оголошені статичними, знищуються після виходу з функції. Але повернення за посиланням повертає у викликаючу програму тільки адресу даних, яка для локальних змінних вказує на дані, що знаходяться всередині функції. При поверненні з функції вказівник зберігає вже таке значення, що не має сенсу. Компілятор може сигналізувати про таку проблему попередженням. Розв’язати таку проблему можна з використанням вказівника this.
Дата добавления: 2015-08-26; просмотров: 669;