![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Proger10 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Читаю различную документацию по C++, не могу понять одного. В чём разница между таким созданием экземпляров класса:
К одному впоследствии обращение будет через точку, ко второму через "->". Вторая переменная содержит - указатель на экземпляр класса, а первая, видимо, сам экземпляр класса? ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Proger10, первый вариант используется тогда, когда объект может жить ограниченное время (пока функция не завершится, например). А второй в остальных случаях, в т.ч. при динамическом создании объектов (например, на основании файла конфигурации).
Создание объектов простых классов в первом случае значительно быстрее, чем во втором. |
|||
|
||||
Proger10 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
А память, при этом, самостоятельно высвободится или это необходимо делать вручную, когда объект больше не нужен? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Proger10, в первом варианте да, во втором нет
|
|||
|
||||
EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
bsa, в первом случае объект создается в стеке??
|
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Да. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
если объект создается с помощью malloc/new или других методов выделения памяти, то он создается в куче.
если создается глобальный или статический объект, то он создается в области статических данных - не куча и не стек. если нестатический объект создается внутри функции без использования malloc/new и пр., то он будет размещен в стеке. Под словом "объект" понимается переменная любого типа. |
|||
|
||||
Proger10 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
А если объект создаётся этим методом: "ClassA obj", можно ли в данном случае вручную очищать память моментально, после того, как объект становится ненужным? Или в этом никакого резона нет?
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Proger10, не только "нет резона", но и нельзя, т.к. после твоего освобождения памяти сработает автоматическое и будет крах
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
В данном случае компилятор тебе выдаст предупреждение, что не хорошо это. Остальное сказал более опытный кот borisbn |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |