Qt 删除指针方法
Qt deletion pointer method
在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
}
在插槽方法中删除较新的数据包类 *数据包是否正确?有时我的程序崩溃,那么删除在信号/插槽中传递的指针的最佳方法是什么(我想我必须删除 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();
}
假设 PacketClass 派生自 QObject,则调用 deleteLater 函数: -
pkt->deleteLater();
这将在正确的时间处理删除对象,在处理信号和槽之后,以及当控制返回到事件循环时。
请参阅此处的 deleteLater 文档,该文档也与 Qt4 相关
相关文章:
- 将一个类的方法指针存储到另一个类中
- 如何调用返回类方法指针的类方法
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?
- 泛型方法指针.reinterpret_cast指向不同类的方法指针,这是 UB 吗?
- C++;类方法指针;λ;将 lambda 作为成员函数指针传递;
- 使用模板、方法指针和字符串键入推导
- 将方法指针作为整数参数发送到C#的C 方法
- 从C 中的VTable获取方法指针
- 模板化方法指针 - 无法匹配函数参数的指针
- 获取特定的模板重载方法指针
- 如何将方法指针声明为Typedef方法参数
- 如何将方法指针类型转换为函数指针类型
- 如何在使用 pthreads 时将方法指针作为函数参数传递C++
- 方法指针映射,编译器说他们不接受任何参数
- C# 方法指针,如 C++ 中的指针
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- 尝试获取类方法指针时出现E_NOINTERFACE
- 传递和强制转换方法指针
- 常量方法指针的类型是什么
- 将对象的方法指针传递给接受 [静态方法指针/全局函数] 指针的函数