2013-12-05 2 views
0

Чтобы сделать псевдокод что-то в этом зависит от конкретного языка ДАВАЙТЕ вдоль линий:Инстанцирования в петле - примитивы и объекты

for(int i=0;i<=N;i++){ 
     double d=0; 
     userDefinedObject o=new userDefinedObject();  

     //effectively do something useful 
     o.destroy(); 
    } 

Теперь это может попасть в более глубокие детали между Java/C++/Python и т.д., но:

1 - Делает это с примитивами неправильно или просто отвратительно/overkill (d может быть определено выше и при необходимости установить на каждую итерацию на 0).

2 - Выполняет ли это с объектом, в действительности неправильным? Теперь я знаю, что Java позаботится о памяти, но для C++ предположим, что у нас есть правильный деструктор, который мы называем.

Теперь - вопрос довольно краткий - это неправильно или просто вопрос вкуса?

спасибо.

+0

Это очень зависит от языка, и Я не уверен, какая часть вашего вопроса - это «это» в «выполнении этого с помощью примитивов». Если вы говорите об объявлении его внутри цикла вместо внешнего, это хорошо. Если вы хотите, чтобы каждая итерация начиналась с 'd', свежей инициализацией до 0, объявление ее внутри цикла - лучший способ сделать это. Это не повлияет на производительность. – user2357112

+0

Для второй части вам не нужно явно обращаться к деструктору объекта в C++, Java, Python или большинстве популярных языков. (В C вам нужно будет явно уничтожить его.) На языке GC'd GC уничтожит объект для вас. В C++ вы должны объявить его в стеке или обработать его через 'std :: unique_ptr', а C++ вызовет деструктор для вас. – user2357112

+0

«Это» - это инстанцирование внутри цикла, как предполагает название вопроса. Спасибо, что указали, что если это иначе не ясно. –

ответ

0

Java Garbage Collector позаботится о любом распределении памяти без ссылки, а это означает, что если вы создаете экземпляр на каждой итерации, вы будете выделять новую память и потерять ссылку на предыдущую. Сказанное это, вы можете заключить, что GC позаботится о нередактируемой памяти, НО вы также должны учитывать тот факт, что выделение памяти, в частности инициализация объекта, требует времени и процесса. Итак, если вы делаете это по небольшой программе, вы, вероятно, не почувствуете ничего плохого. Но позвольте сказать, что вы работаете с чем-то вроде Bitmap, распределение будет полностью владеть вашей памятью.

В обоих случаях, я бы сказал, что это дело вкуса, но в реальной жизни проекта, вы должны быть абсолютно уверены, что вы должны инициализировать в цикле

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