Класс указателя копирования C

#c

#c

Вопрос:

У меня проблема. Я вроде как новичок в C , поэтому, пожалуйста, имейте это в виду ^^ Итак, у меня вызвана функция, ::Save( Player* pPlayer ) с помощью которой я вставляю в карту m_mapSAVEDPLAYERS копию проигрывателя. Но сначала мне нужно создать копию этого проигрывателя, но как? Должен ли я сделать Player* pNewPlayer = new Player(); и затем… pNewPlayer = pPlayer или *pNewPlayer = *pPlayer ? Он должен быть на новом адресе, чтобы он не был изменен позже. Спасибо за помощь.

Комментарии:

1. Учитывая, что вы новичок в C , вы абсолютно уверены , что вам нужно хранить указатели на динамически выделяемые объекты? Я бы также посоветовал проверить ваш код на предмет утечек памяти.

2. Не используйте венгерскую нотацию, т.е. не кодируйте информацию о типе в именах. Используйте простые имена, такие как player и savedPlayers . И в качестве общего руководства не используйте new , если вы точно не знаете, почему. Скорее всего, это std::map<..., Player> и передача аргументов как Player constamp; — это все, что вам нужно. Если нет, std::map<..., std::unique_ptr<Player>> может выполнить эту работу.

Ответ №1:

Вам нужно вызвать c’tor для копирования.

 Player* pNewPlayer = new Player(*pPlayer);
  

И убедитесь, что не разыменовываете указатель с нулевым значением.