Программирование на C и C++

Онлайн справочник программиста на C и C++

Возвращение объектов функциями

Функция может возвращать объект в точку вызова. В качестве примера рассмотрим программу:

#include <iostream.h>
class myclass {
int i;
public:
void set_i(int n) {i=n;}
int get_i() {return i;}
};
myclass f(); // возвращение объекта типа myclass
int main()
{
myclass o;
о = f ();
cout << о.get_i() << "\n";
return 0;
}
myclass f()
{
myclass x;
x.set_i(1);
return x;
}

Когда функция возвращает объект, автоматически создается временный объект, содержащий возвращаемое значение. Именно этот объект фактически возвращается функцией. После того, как значение возвращено, этот объект уничтожается. Уничтожение временного объекта может вызывать неожиданные побочные эффекты в некоторых ситуациях. Например, если возвращае­мый функцией объект имеет деструктор, освобождающий динамически зарезервированную па­мять, то эта память будет освобождена даже в том случае, когда объект, получающий возвраща­емое значение, будет продолжать использовать ее. Как будет продемонстрировано дальше в этой книге, имеются способы преодолеть эту проблему, для чего используется перегрузка оператора присваивания и определение конструктора копирования.