Ваша строка Class();
вызывает конструктор класса Class
, но вызывает его для создания "временного объекта". Поскольку этот временный объект не используется, строка не имеет никакого полезного эффекта.
Временные объекты (обычно) исчезают в конце выражения, в котором они появляются. Они полезны для передачи в качестве параметров функции или для инициализации других объектов. Почти никогда не бывает полезно просто создать его в одном утверждении. Язык допускает его в качестве допустимого выражения, просто для большинства классов это не так уж и много.
В C ++ нет способа вызвать конструктор для объекта, который уже был построен. Жизненный цикл объекта C ++ - это одна конструкция и одно разрушение. Вот только как это работает. Если вы хотите сбросить объект в течение его жизни, вы сделали правильную вещь, а именно, вызвали функцию для его сброса. В зависимости от вашего класса вам может не понадобиться писать один - оператор присваивания по умолчанию может делать именно то, что вам нужно. Вот тогда временный может пригодиться:
Class myObject;
// ... do some stuff to myObject ...
myObject = Class();
Это обновляет myObject
значениями из недавно созданного временного. Это не обязательно самый эффективный из возможных кодов, поскольку он создает временный, затем копирует, а затем уничтожает временный код, а не просто устанавливает поля в их начальные значения. Но если у вас огромный класс, маловероятно, что выполнение всех этих 1000 раз займет заметное количество времени.
Другой вариант - просто использовать новый объект для каждой итерации:
int main() {
int counter = 0;
while (counter < 1000) {
Class myObject;
// stuff happens, each iteration has a brand new object
}
}
Обратите внимание, что Class MyClass();
не не определяет объект типа Class, называемый MyClass, и создает его без параметров. Он объявляет функцию MyClass, которая не принимает параметров и возвращает объект типа Class. Предположительно в вашем реальном коде конструктор имеет один или несколько параметров.