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

Компілятор мови 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++ гарантує, що тимчасовий рядок буде знищений пізніше, ніж , які на ньому «паразитують», «матеріалізуються» в інший, так само тимчасовий рядок .

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