В проекте Qt У меня есть методQt удаление метод указатель
void ProtocolHandler::interpretData(uint8_t packet_id){
PacketClass *packet = new RSP2StatusPacket(_packet_buf);
emit packetReceived(packet);
}
где я объявить объект пакет типа PacketClass, а затем я испустить сигнал
packetReceived (PacketClass*)
В другом классе у меня есть следующий слот:
void ReceiverCommands::processReceivedPacket(PacketClass* pkt)
{
status_packet *payload = pkt->getPayload();
delete pkt
}
Правильно ли удалить новый пакет PacketClass * в методе слота? Иногда моя программа вылетает так, что лучший способ удалить указатель, переданный в сигнале/слоте (я полагаю, я должен удалить pkt, потому что я создаю новый пакет в методе «interpradata»).
вы не должны делать этого, что, если есть несколько слотов, подключенных к этому сигналу (или даже двойное подключение) –
В случае PacketClass не производном от QObject, я хотел бы попробовать какой-то подход с использованием оболочки class и QSharedPointer, чтобы убедиться в удалении объекта, когда все слоты завершат обработку. В другом случае ответ Merlin069 правильный. – Jairo
@Jairo: Зачем вам нужен класс-обертка? –