2015-03-27 2 views
-6

Мне было интересно, в чем разница между этими двумя способами использования объекта obj. И что будет с памятью в обоих примерах?В чем разница между объявлением объекта снаружи и внутри цикла

  • Пример 1: Объект объявлен вне цикла
  • Пример 2: Объект объявляется внутри цикла.
  • В обоих примерах я вызываю функцию func, которая принимает в качестве параметров a vector типа float. Размер этого вектора составляет не менее элементов.

Пример 1

MyObject obj; 

for(int i = 0; i < n; i ++) 
{ 
    obj.func(vector<float>); 
} 

Пример 2

for(int i = 0; i < n; i ++) 
{ 
    MyObject obj; 
    obj.func(vector<float>); 
} 

+2

Возможно, вы захотите узнать о [scope] (http://en.cppreference.com/w/cpp/language/scope) – NathanOliver

+1

@HaniGoc, если вы оставите комментарии подобным образом, вопрос будет просто больше, голосов. –

+0

У него есть точка. Это был вполне разумный вопрос. –

ответ

-1

При объявлении объекта внутри цикла, новый объект будет создан на каждом итерации и извлечения уничтожается в конце каждой итерации. Это связано с тем, что объект будет иметь область внутри {}.

Когда вы объявляете его снаружи, создается один объект, и вы работаете с ним. Но когда вы помещаете его в цикл, на каждой итерации создается и уничтожается новый объект, который будет влиять на скорость.

То есть, когда вы используете

MyObject obj; 

for(int i = 0; i < n; i ++) 
{ 
    obj.func(vector<float>); 
} 

You клеть только один объект. Но когда вы используете

for(int i = 0; i < n; i ++) 
{ 
    MyObject obj; 
    obj.func(vector<float>); 
} 

создавать и уничтожать n объекты. Это увеличит время выполнения. Таким образом, лучше использовать первое.

+0

Когда цикл заканчивается или заканчивается итерация? – user3528438

+0

И так лучше для памяти? –

+0

На самом деле вы создаете новый объект MyObject для каждой итерации. Поместите печать в конструктор и попробуйте. –

Смежные вопросы