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

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

Передача ссылок на объекты

Когда объект передается функции как аргумент, создается копия объекта. Более того, при создании этой копии конструктор объекта не вызывается. Вместо этого делается точная копия объекта. Однако по окончании выполнения функции вызывается деструк­тор копии объекта. Если по каким-либо причинам нежелательно, чтобы создавалась копия объекта или чтобы вызывался деструктор, то надо передать объект в функцию по ссылке. При передаче по ссылке копия объекта не создается. Это также означает, что объект-параметр не будет уничто­жаться при выходе из функции и соответственно не будет вызван деструктор. В качестве примера запустим следующую программу:

#include <iostream.h>
class cl {
int id;
public:
int i;
cl (int i);
~cl ();
void neg(cl &o) {o.i = -o.i;}
};
cl::cl(int num)
{
cout << "Constructing " << num << "\n";
id = num;
}
cl::~cl()
{
cout << "Destructing " << id << "\n";
}
int main()
{
cl о (1);
o.i = 10;
о.neg (o);
cout << o.i << "\n";
return 0;
}

Программа выдает следующие результаты:

Constructing 1
-10
Destructing 1

Как можно видеть, деструктор объекта cl вызывался только один раз.

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