#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);
И убедитесь, что не разыменовываете указатель с нулевым значением.