Немного запутанная ситуация с указателем
Привет,
Я не совсем уверен, как работают указатели в этой ситуации, которую я создал, и я стараюсь избегать утечек памяти. Я написал следующий код;
Packet* packet; // construct packet from ID and data switch (packet_id) { case 0: PacketPlayerMove* p = new PacketPlayerMove(); // call some methods on p here which aren't present in base class Packet packet = p; } return packet;
Таким образом, PacketPlayerMove и многие другие являются реализациями пакета базового класса. Этот метод возвращает пакет*, поэтому я создаю пакет* и присваиваю его значение в качестве экземпляра любого из наследующих классов в зависимости от уникального идентификатора packet_id.
В двух словах:
packet_id 0: return PacketPlayerMove
packet_id 1: возврат PacketPlayerChat
и т.д.
Я не уверен, стоит ли мне удалять
p
или нет, потому что я не уверен, что это удалит packet
, поскольку либо его ссылка, либо значение копируются - вот где мои знания указателей туманны.Я буду удалять
packet
позже, но я не знаю, должен ли я удалить p сейчас, или это не нужно удалять.Что я уже пробовал:
-----------------------------------------------
Richard MacCutchan
Если вы удалите p перед возвращением из этой функции, то пакет больше не будет действителен. У вас есть только один фактический блок памяти, но оба p и packet указывают на него.