Вот вопросы, связанные с объявлением переменных встроенного типа внутри цикла for
:
Есть ли накладные расходы на объявление переменной внутри цикла? (С++)
Объявление переменных внутри циклов, хорошая практика или плохая практика ? (2 части)
Но я хотел бы сузить эту тему и спросить об объявлении пользовательских переменных типа класса, которые наследуются или создаются с помощью композиции и имеют нетривиальные конструкторы/деструкторы с динамическим выделением/освобождением памяти (new/delete).
a) int count = 0;
while(count < 1000000)
{
myClass myObj = some value;
++count;
}
b) int count = 0;
myClass myObj;
while(count < 1000000)
{
myObj = some value;
++count;
}
c) {
int count = 0;
myClass myObj;
while(count < 1000000)
{
myObj = some value;
++count;
}
}
- Если мне нужно использовать определяемую пользователем переменную класса внутри цикла, что является наилучшей практикой для этого, объявить ее внутри или вне цикла?
Если он будет объявлен внутри цикла, цепочка конструкторов и деструкторов будет вызываться на каждой итерации, но у нас будут преимущества ограниченной области действия (a).
Если переменная, которую мы объявили вне цикла, на каждой итерации будет вызываться только оператор присваивания, но эта переменная будет доступна вне области действия цикла (b).
Достаточно ли умны компиляторы, чтобы оптимизировать объявление сложных типов данных как локальную переменную цикла? Выделение памяти происходит один раз, а затем повторно используется одно и то же пространство на каждой итерации?
Если передовой опыт состоит в том, чтобы объявить переменную вне цикла, стоит ли помещать цикл внутрь области действия, чтобы ограничить область действия (C)?
a
иb
на самом деле делают разные вещи. Какой ты хочешь? - person M.M   schedule 14.07.2015