Просто верните такой объект:
Thing calculateThing()
{
Thing thing();
// do calculations and modify thing
return thing;
}
Это вызовет конструктор копирования в Things, так что вы можете захотеть выполнить свою собственную реализацию. Например:
Thing(const Thing& aThing) {}
Это может быть немного медленнее, но это может быть не проблема.
Обновить
Компилятор, вероятно, оптимизирует вызов конструктора копирования, поэтому никаких дополнительных накладных расходов не будет. (Как отмечалось в комментарии).