Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чём отличие создания экземпляра класса? с указателем и без него 
:(
    Опции темы
Proger10
Дата 24.3.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Читаю различную документацию по C++, не могу понять одного. В чём разница между таким созданием экземпляров класса:

Код

ClassA classA;

// и:

ClassA *classA = new ClassA();


К одному впоследствии обращение будет через точку, ко второму через "->". Вторая переменная содержит - указатель на экземпляр класса, а первая, видимо, сам экземпляр класса? smile Но не пойму вот что - а в чём собственно профит использования одного и другого случая? В каких случаях используется первый вариант, а в каких второй?
PM MAIL   Вверх
bsa
Дата 24.3.2013, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Proger10, первый вариант используется тогда, когда объект может жить ограниченное время (пока функция не завершится, например). А второй в остальных случаях, в т.ч. при динамическом создании объектов (например, на основании файла конфигурации).
Создание объектов простых классов в первом случае значительно быстрее, чем во втором.
PM   Вверх
Proger10
Дата 24.3.2013, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Цитата(bsa @ 24.3.2013,  18:48)
Proger10, первый вариант используется тогда, когда объект может жить ограниченное время (пока функция не завершится, например).

А память, при этом, самостоятельно высвободится или это необходимо делать вручную, когда объект больше не нужен?
PM MAIL   Вверх
bsa
Дата 24.3.2013, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Proger10, в первом варианте да, во втором нет
PM   Вверх
EgoBrain
Дата 17.4.2013, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



bsa, в первом случае объект создается в стеке??
PM MAIL ICQ Skype   Вверх
k0rvin
Дата 17.4.2013, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(EgoBrain @ 17.4.2013,  02:19)
bsa, в первом случае объект создается в стеке??

Да.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
bsa
Дата 17.4.2013, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



если объект создается с помощью malloc/new или других методов выделения памяти, то он создается в куче.
если создается глобальный или статический объект, то он создается в области статических данных - не куча и не стек.
если нестатический объект создается внутри функции без использования malloc/new и пр., то он будет размещен в стеке.

Под словом "объект" понимается переменная любого типа.
PM   Вверх
Proger10
Дата 18.4.2013, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



А если объект создаётся этим методом: "ClassA obj", можно ли в данном случае вручную очищать память моментально, после того, как объект становится ненужным? Или в этом никакого резона нет?
PM MAIL   Вверх
borisbn
Дата 18.4.2013, 06:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Proger10, не только "нет резона", но и нельзя, т.к. после твоего освобождения памяти сработает автоматическое и будет крах


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kolesnle
Дата 21.4.2013, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Proger10 @  18.4.2013,  06:12 Найти цитируемый пост)
А если объект создаётся этим методом: "ClassA obj", можно ли в данном случае вручную очищать память моментально, после того, как объект становится ненужным? Или в этом никакого резона нет? 

В данном случае компилятор тебе выдаст предупреждение, что не хорошо это. Остальное сказал более опытный кот borisbn
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.