c++ - Qt删除指针方法

标签 c++ qt qt4

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

最佳答案

信号上可以有任意数量的槽(包括零个和多个!),因此您永远不应该期望槽会释放通过裸传递的内存 指针。

您应该传递 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/

相关文章:

c++ - 是否可以让现有的 C++ 代码与 Qt 一起工作?

c++ - 如何从 QThread::run() 获取用户反馈,例如Q消息框?

c++ - 如何重定向 LLI 输出?

c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>

c++ - 如何检测TCP连接中网线被拔掉?

c++ - C++ 中的静态对象与单例类对象?

qt - 如何在 qml 中旋转 3d 立方体?

c++ - QDockWidget 选项卡位置

c++ - 使用 Qt 线程的最小示例?

c++ - 如何获取哪个 QradioButton 调用 SLOT