Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
#1

В чем разница между ClassName cn и ClassName cn = new ClassName()? - C++

26.02.2014, 11:23. Просмотров 230. Ответов 6
Метки нет (Все метки)

Добрый день! Собственно вопрос в заголовке темы. Будьте добры расскажите пожалуйста в чем между ними разница.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.02.2014, 11:27     В чем разница между ClassName cn и ClassName cn = new ClassName()? #2
В первом случае объект создается на стеке и будет автоматически уничтожен при выходе из области видимости. Во втором - объект создается в куче, удалять его надо уже руками.
P.S. во втором случае должен быть
C++
1
ClassName* cn
, т.е. указатель.
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
26.02.2014, 11:29  [ТС]     В чем разница между ClassName cn и ClassName cn = new ClassName()? #3
Tulosba, спасибо. Это только и всего лиж разница? Вопрос тогда. А в чем смысл тогда управлять сбором мусора в ручную? Т.е. почему можно создать объект двумя способами?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.02.2014, 11:36     В чем разница между ClassName cn и ClassName cn = new ClassName()? #4
Цитата Сообщение от Faruq Посмотреть сообщение
А в чем смысл тогда управлять сбором мусора в ручную?
Чтобы не управлять вручную можно использовать идиому RAII.
Цитата Сообщение от Faruq Посмотреть сообщение
Т.е. почему можно создать объект двумя способами?
В некоторых случаях объект должен быть локальным, т.е. уничтожаться внутри блока, а в некоторых может потребоваться его передать наружу. Во втором случае и чтобы избежать копирования в самом элементарном случае создается объект в куче и возвращается указатель на него.
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
26.02.2014, 11:41     В чем разница между ClassName cn и ClassName cn = new ClassName()? #5
Цитата Сообщение от Faruq Посмотреть сообщение
А в чем смысл тогда управлять сбором мусора в ручную?
Смысл в том, что каждая операция new, которая выделила блок памяти в куче, требует применения операции delete для ее освобождения. Если этого не сделать вручную, то возникнет эффект утечки памяти.

Альтернатива (если не хотите освобождать память вручную) - использовать интеллектуальные указатели, которые, по сути, сами являются объектами классов. Например, auto_ptr.
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
26.02.2014, 11:44  [ТС]     В чем разница между ClassName cn и ClassName cn = new ClassName()? #6
Всем спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 11:47     В чем разница между ClassName cn и ClassName cn = new ClassName()?
Еще ссылки по теме:

Как работает class className : private otherClassName {} ? C++
В чем разница между scanf_s и scanf? C++
В чем разница между malloc и new? C++
В чем разница между Double и Float? C++
C++ В чем разница между Debug and Release?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.02.2014, 11:47     В чем разница между ClassName cn и ClassName cn = new ClassName()? #7
Цитата Сообщение от Extrim88 Посмотреть сообщение
auto_ptr.
Устаревший класс и не рекомендованный к использованию. Используйте std::unique_ptr
Yandex
Объявления
26.02.2014, 11:47     В чем разница между ClassName cn и ClassName cn = new ClassName()?
Ответ Создать тему
Опции темы

Текущее время: 01:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru