Это не примитивное значение, поэтому его конструктор и / или деструктор могут иметь желаемые побочные эффекты.
Чтобы проиллюстрировать, что это происходит на практике: я использую класс для определения временных отрезков кода, который выглядит примерно так:
class Timed {
double start;
public:
Timed() { start = now(); }
~Timed() { std::cout << (now() - start) << '\n'; }
}
Итак, чтобы измерить, сколько времени займет функция, я просто делаю:
void slow() {
Timed t;
// heavy operation here...
}
Переменная t
никогда не используется, но она по-прежнему важна для поведения кода.