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