crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

haiflive
  опции профиля:
сообщение 9.7.2011, 15:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


Прошу разъяснить мне давно волнующую меня тему..
Вопрос про оператор new, в чём разница между этими двумя функциями?. какой вариант предпочтительней и почему?.

Функция 1:
void myFunction()
{
    myObject* obj = new myObject;
    /*...*/
    delete obj;
}


Функция 2:
void myFunction2()
{
    myObject obj;
    /*...*/
}


Я конечно понимаю, что выделение памяти произодёт в первом варианте в момент создания обекта, а во втором в момент обращения к функции.. А ни всё ли равно?. ну конечно если мы там внутри функции будем работать с "большим обектом", то его возможно потребуется удалить(и создать и удалить), НО рассматривается тот случай, когда создаётся объект в начале функции и удаляется только в конце..
Насчёт скорости ничего сказать не могу..
Насчёт ошибок, второй вариант предпочтительней так как по объёму написанного кода меньше, и не надо думать о том, что бы удалять обект.
Почему я сплошь и рядом наблюдаю первый вариант?. это что такая привычка, или есть скрытый смысл?.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
haiflive
  опции профиля:
сообщение 10.7.2011, 16:06
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


Вот нагуглил такое правило, думаю его и буду придерживаться:
Цитата
для локальных данных функции лучше подходит стэк для всего остального куча.
Если объем данных превышает некое пороговое значение (начиная с 4КБ) или размер данных динамический то можно начинать думать о размешении их в куче.


Вот уж не думал, что затронул священную войну про то, где размещать переменные в стеке или в куче, оказалось и ссылочные типы и.. как их там.. "простые" могу рамещаться, как в стеке так и в куче, это решает операционная система и компилятор по каким-то "магическим" правилам..

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

Всем спасибо за ответы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 27.6.2025, 8:31