Временный объект

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Вре́менные объекты — в C++ объекты, которые компилятор создаёт автоматически по ходу вычисления выражений. Такие объекты не имеют имени и уничтожаются сразу же, как только в них исчезает потребность.

Пример[править | править исходный текст]

string r = string("1") + "2" + "3";

Этот код работает таким образом (ctor — конструктор, dtor — деструктор).

string r, tmp1, tmp2, tmp3;
tmp1.ctor("1");
tmp2.ctor();
tmp2 = tmp1 + "2";
tmp3.ctor();
tmp3 = tmp2 + "3";
r.ctor(tmp3);
tmp3.dtor();
tmp2.dtor();
tmp1.dtor();

Оптимизация возврата значений[править | править исходный текст]


В других языках[править | править исходный текст]

Практически все языки (кроме самых низкоуровневых) способны автоматически создавать временные переменные для промежуточных результатов простых типов (целый, дробный, указатель). Во многих языках (Паскаль) существует подобная система для строк. Практически все языки программирования со сбором мусора (C#, Java) выдают промежуточные результаты любого типа — ведь для них нет разницы между постоянным и временным объектом. Только C++ способен автоматически создавать промежуточные объекты произвольных типов, вызывая для них конструктор и деструктор.