Переменные на самом деле не «созданы» или «уничтожены». Это понятия на уровне абстракции языка программирования. Компилятору не требуется иметь однозначное соответствие между переменной и адресами памяти. На практике большую часть времени пространство стека для локальных переменных выделяется сразу в начале функции, поэтому это не влияет на производительность.
Обратите внимание, что C ++, в отличие от C, который не имеет понятия о конструкторах, поддерживает конструирование и уничтожение объектов, поэтому, если вам нужно определить переменную типа класса в цикле for, как показано ниже,
class MyClass {
public: MyClass() { cout << "hello world" << endl; }
};
//...
for (int i = 0; i < 10; ++i) {
MyClass m;
}
вы бы вызывали его конструктор каждый раз, эффективно печатая «привет мир» десять раз. Это очень отличается от объявлений C и не должно быть перепутано с ним.