Можливі дублікати:
У чому різниця між створенням об’єкта за допомогою new vs without
Створення об'єкта: з `new` або без нього
У чому різниця між цими двома твердженнями
HttpUtil httpUtil;
і
HttpUtil *net = new HttpUtil();
Який з них краще використовувати?
Відповіді:
2 для відповіді № 1Перший оператор створює змінну з назвою httpUtil
на "стеку" - це означає, що як тільки функція, що містить цей рядок, закінчується, змінна виходить "за межі обсягу" і звільняється (пам'ять, яку вона використовує, стає вільною для використання для інших матеріалів).
Другий вислів створює змінну в "купі" - це означає, що змінна буде залишатися в пам'яті, доки ви не зателефонуєте delete
на цьому. При розподілі змінних у купі потрібно переконатися, що завжди delete
це в якийсь момент, інакше ви отримаєте витік пам'яті - тут ви більше не зможете бачити свій *net
змінної, але пам'ять все одно виділено.
4 для відповіді № 2
Перший створює автоматичну змінну. Управління пам'яттю відбувається автоматично, розподіл відбувається швидше, оскільки він знаходиться в стеку, шансів на витік пам’яті немає.
Друга версія створює динамічну змінну - ви відповідаєте за очищення пам'яті, і розподіл у купі повільніший.
Завжди віддайте перевагу першому. Якщо вам потрібно використовувати динамічне розподіл (для збереження тривалості життя чи поліморфної поведінки), використовуйте розумні вказівники замість необроблених покажчиків.
1 для відповіді № 3
Перший - це статично створений об'єкт, де вине потрібно турбуватися про його знищення. Пізніше це динамічно створений об'єкт, де вам потрібно подбати про його знищення до завершення програми.
Перший - кращий, коли вам не потрібно турбуватися про управління пам’яттю.