Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
1

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

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

Добрый день! Собственно вопрос в заголовке темы. Будьте добры расскажите пожалуйста в чем между ними разница.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 11:23
Ответы с готовыми решениями:

Имя_класса + Скобки - int(), className() и.т.д.
Здравствуйте. Появился вопрос. Что означает этот код: int() То есть имя...

Как работает class className : private otherClassName {} ?
Приветствую всех. Не могу разобраться, как работает такая конструкция: class...

Ошибка cannot convert from type void*(classname::) () to type void*(*)(void*)
Подскажите пожалуйста как избавиться от ошибки? Есть ещё какой-либо способ,...

В чем разница между [] и * ?
Думал, что ни в чем, но когда попытался сделать так: (в файле 1) char lc; в...

В чем разница между X x; и X x()?
Корректный ли этот ответ?

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

Альтернатива (если не хотите освобождать память вручную) - использовать интеллектуальные указатели, которые, по сути, сами являются объектами классов. Например, auto_ptr.
0
Faruq
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 29
26.02.2014, 11:44  [ТС] 6
Всем спасибо!
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.02.2014, 11:47 7
Цитата Сообщение от Extrim88 Посмотреть сообщение
auto_ptr.
Устаревший класс и не рекомендованный к использованию. Используйте std::unique_ptr
0
26.02.2014, 11:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 11:47

В чем разница между С и С++
Возник вопрос в чем жи разница между С и С++ кроме того, что в С++ есть классы...

В чем разница между malloc и new?
в чем разница? что лучше использовать?

В чем разница между new и malloc()?
Всем доброго дня ! Начал читать книгу Пахомов Б. "C/C++ и MS Visual C++ 2008...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru