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