Your comments

Вся эта проблема, по крайней мере в С++, не является проблемой при соблюдении const-чистоты. Если класс у нас определен как

class TempRange {
public:
    double get_low() const { /* ... */ }
    double get_high() const { /* ... */ }
    double set_low() { /* ... */ }
    double set_high() { /* ... */ }
};

И принимающий метод будет выглядеть как-то так

bool within_range(const TempRange& tempRange) { /* ... */ }

То не возникнет проблем ни с лишним выделением памяти, ни с иммутабельностью/мутабельностью этого самого объекта. Все упирается в грамотное использование возможностей языка, кратко говоря.

Держи в курсе, дружище.