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

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

Восстановить пароль Регистрация
 
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
26.02.2014, 11:23     В чем разница между ClassName cn и ClassName cn = new ClassName()? #1
Добрый день! Собственно вопрос в заголовке темы. Будьте добры расскажите пожалуйста в чем между ними разница.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 11:23     В чем разница между ClassName cn и ClassName cn = new ClassName()?
Посмотрите здесь:

В чем разница между random и randomize? C++
В чем разница между вектором и массивом C++
Имя_класса + Скобки - int(), className() и.т.д. C++
В чем разница между С и С++ C++
C++ В чем разница между X x; и X x()?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 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
:)
Эксперт С++
4378 / 3221 / 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()?
Еще ссылки по теме:

C++ В чем разница между [] и * ?
C++ В чем разница между инициализацией и присваиванием?
Как работает class className : private otherClassName {} ? C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 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()?
Ответ Создать тему
Опции темы

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