Временный объект
Вре́менные объекты — в C++ объекты, которые компилятор создаёт автоматически по ходу вычисления выражений. Такие объекты не имеют имени и уничтожаются сразу же, как только в них исчезает потребность.
Пример
<source lang="cpp"> string r = string("1") + "2" + "3"; </source>
Этот код работает таким образом (ctor — конструктор, dtor — деструктор).
<source lang="cpp"> 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(); </source>
Ошибка с временным объектом
Существует риск изменить временный объект, «похоронив» изменения вместе с объектом.
<source lang="cpp"> void DoSomething(double& x) {
x *= 2;
};
int x = 5; DoSomething(x); </source>
Этот код развёртывается в… <source lang="cpp"> int x = 5; double tmp1 = x; DoSomething(tmp1); </source>
и изменения уничтожаются вместе с временным объектом tmp1. Большинство компиляторов предупреждают о таком использовании временных объектов.
В других языках
Практически все языки (кроме самых низкоуровневых) способны автоматически создавать временные переменные для промежуточных результатов простых типов (целый, дробный, указатель). Во многих языках (Паскаль, Java) существует подобная система для строк. Только C++ способен автоматически создавать промежуточные объекты произвольных типов, вызывая для них конструктор и деструктор.
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....