[C++] Зачем делают указатель на класс? - Вопросы по С+

Вопрос [C++] Зачем делают указатель на класс?

Регистрация
22 Ноя 2013
Сообщения
99
Репутация
0
Спасибо
0
Монет
0
Пожалуйста имейте ввиду, что этот пользователь забанен
Добрый день, подскажите, зачем делают указатель при объявлении объекта класса?
Вот пример - CDog* pDog = new CDog(); и CDog dog = CDog();
Какую они имеют разницу, кроме вызова функции с помощью -> и . ?
 
Регистрация
28 Июл 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Разница в том, что передавая собаку по ссылке в некоторый метод ты передаешь 8-16 байт. А когда ты это делаешь по значению, ты создаешь точную копию собаки и тащишь ее через стек со всеми блохами. Ну и динамически выделяя память ты можешь создать хоть целую свору самых разных собак.
 
Регистрация
9 Июл 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
p - Pointer - это ссылка на объект, позволяет взаимодействовать с ТЕМ САМЫМ объектом, на который ссылается Безссылочная переменная же просто скопируется (и накакает в память, если это не стек): pDog2 = pDog1 pDog2->kill() // умрет pDog1 Dog2 = Dog1 Dog2->kill() // Умрет только Dog2
 
Регистрация
8 Дек 2013
Сообщения
75
Репутация
0
Спасибо
1
Монет
0
CDog dog = CDog(); это предпочтительнее в абсолютном большинстве случаев, чтобы не рисковать утечками и багами при ручном выделении памяти только данная запись избыточна достаточно так CDog dog; конструктор вызовется
 
Регистрация
26 Дек 2012
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
Используйте динамическую память: CDog* pDog = new CDog(); , а не стек CDog dog; Это практически очевидно в абсолютном большинстве случаев, с опытом понимание может и придёт.
 
Регистрация
25 Окт 2013
Сообщения
68
Репутация
0
Спасибо
0
Монет
0
при указателе память выделяется один раз (в куче) и таскается только ссылка на этот кусок памяти. Второй вариант - создание объекта в стеке. Если куда-то его передавать - будет создаваться копия (и оригинальный объект не будет модифицироваться при изменении копии)
 
Сверху Снизу