![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
haiflive |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 8.7.2010 Пользователь №: 1868 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Прошу разъяснить мне давно волнующую меня тему..
Вопрос про оператор new, в чём разница между этими двумя функциями?. какой вариант предпочтительней и почему?. Функция 1:
Функция 2:
Я конечно понимаю, что выделение памяти произодёт в первом варианте в момент создания обекта, а во втором в момент обращения к функции.. А ни всё ли равно?. ну конечно если мы там внутри функции будем работать с "большим обектом", то его возможно потребуется удалить(и создать и удалить), НО рассматривается тот случай, когда создаётся объект в начале функции и удаляется только в конце.. Насчёт скорости ничего сказать не могу.. Насчёт ошибок, второй вариант предпочтительней так как по объёму написанного кода меньше, и не надо думать о том, что бы удалять обект. Почему я сплошь и рядом наблюдаю первый вариант?. это что такая привычка, или есть скрытый смысл?. |
|
|
![]() |
haiflive |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 8.7.2010 Пользователь №: 1868 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо всем за исчерпывающие ответы.
Цитата стек - "удобный, не резиновый" Насколько он не резиновый?. или это зависит от компилятора?. Компилятор MinGW напритмер? >>Почему я сплошь и рядом наблюдаю первый вариант? покажи пример Наверное я слишком часто читал книги по QT, вот там просто пистрит подобными примерами..
Цитата нет, т.к. во-втором случае, как только выйдешь из функции - объект умрёт, а в-первом случае - останется жить. И, если ты сохранишь указатель на объект в-первом случае, то сможешь к этому объекту обращаться в будущем. Это я понимаю, но рассматривается случай(как любаят писать при доказателствах теорем: "в том и только в том случае"), когда обект создан в начале и удалён в конце функции. Хотя является плохим тоном переносить обязанность удаления обекта на клиента, стараюсь избегать этого.. Цитата сейчас напрямую выделение динамических объектов в памяти используется не так часто. когда объектов много - то проще юзать различные "умные" указатели, за которыми не нужно следить, или пулы переменных, в которых "выделение" и "освобождение" памяти происходит куда быстрее, чем множественными вызовами для каждого элемента. Знаю про "умные указатели", но не использую их так как пока пишу только для десктопа.. просто голова кругом идёт когда начинаешь использовать эти умные казатели, а вот про пулы переменных почитаю.. что-то не слышал. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 28.6.2025, 1:22 |