Тимчасові об'єкти — у програмуванні об'єкти, які компілятор створює автоматично під час обчислення виразів . Такі об'єкти не мають імені та знищуються відразу ж, як тільки в них зникає потреба.

Компілятор мови C++ викликає для тимчасових об'єктів конструктори (за потребою) і деструктори (відразу після виконання виразу). Це, наприклад, важливо для об'єкта string_view C++17.

При ініціалізації масивів у 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();

Приклад, де важливий час життя об'єкта ред.

std::wstring expandFileName(const std::wstring& x);    // отримує повний шлях. Потребує нуль-термінованості - тому на вході wstring
std::wstring_view extractFilePath(std::wstring_view x);  // витягує з шляху корінь + каталоги + роздільник

std::wstring tempFileName()
{
 return std::wstring(extractFilePath(expandFileName(someFile)))
       .append(L"~filename.tmp");
}

C++ гарантує, що тимчасовий рядок expandFileName(someFile) буде знищений пізніше, ніж wstring_view, які на ньому «паразитують», «матеріалізуються» в інший, так само тимчасовий рядок std::wstring(...).

У інших мовах ред.

Практично всі мови (крім найнижчих) здатні автоматично створювати тимчасові змінні для проміжних результатів простих типів (цілий, дійсний, вказівник). У багатьох мовах (наприклад у Паскалі) існує подібна система для рядків. Практично всі мови програмування зі збором сміття (C#, Java) видають проміжні результати будь-якого типу — адже для них немає різниці між постійним та тимчасовим об'єктом. Тільки C++ здатний автоматично створювати проміжні об'єкти довільних типів, викликаючи їм конструктор і деструктор.