gpt4 book ai didi

c++ - Qt删除指针的方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:18 27 4
gpt4 key购买 nike

在一个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
}

在slot方法中删除较新的PacketClass *packet是否正确?有时我的程序会崩溃,那么删除信号/槽中传递的指针的最佳方法是什么(我想我必须删除 pkt,因为我在“interpretData”方法中实例化了一个新数据包)。

最佳答案

可以有任意数量的槽附加到一个信号(包括零个和多个!),所以你应该永远期望槽释放通过裸<传递的内存/em> 指针。

你应该传递一个 QSharedPointer<PacketClass>并使用它。它会在需要时进行删除。

typedef QSharedPointer<PacketClass> PacketClassPtr;
Q_DECLARE_METATYPE(PacketClassPtr)

ProtocolHandler {
...
Q_SIGNAL void packetReceived(PacketClassPtr packet);
}

void ProtocolHandler::interpretData(uint8_t packet_id){
PacketClassPtr packet(new RSP2StatusPacket(_packet_buf));
emit packetReceived(packet);
}

void ReceiverCommands::processReceivedPacket(PacketClassPtr pkt)
{
status_packet *payload = pkt->getPayload();
}

关于c++ - Qt删除指针的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com