提升共享指针自定义删除器示例
boost shared pointer custom deleter example
>我正在使用libmodbus库。 我需要在线程之间传递modbus_t指针的实例。我很难只使用原始指针,我认为我可以解决将boost_shared_ptr与自定义删除器一起使用的问题。
我没有遇到任何编译器问题,但是当我运行程序时,它会崩溃。我希望是否有人能给我一个使用自定义删除器增强共享指针的使用示例。
程序在OpenModBusConnection((函数中第一次调用m_mb.reset((的行崩溃。
m_mb = boost::shared_ptr<modbus_t>( modbus_new_rtu(m_heatercomport.c_str(),9600,'N',8,1), freemodbus);
void freemodbus(modbus_t *mb)
{
if(mb != NULL)
{
modbus_close(mb);
modbus_free(mb);
}
}
void OpenModBusConnection()
{
if(m_mb.get() != NULL)
{
wxString msg("Closing port "");
msg.append(m_heatercomport);
msg.append("" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Closedn");
m_mb.reset();
}
// open modbus connection
m_mb.reset();
modbus_set_slave(m_mb.get(),1);
if(modbus_connect(m_mb.get()) == -1)
{
wxString msg("Failed to open port "");
msg.append(m_heatercomport);
msg.append("" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Failedn");
return false;
}
else
{
wxString msg("Opening port "");
msg.append(m_heatercomport);
msg.append("" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Establishedn");
return true;
}
}
我收到的错误消息是
First-chance exception at 0x7717bb47 in test.exe: 0xC0000008: An invalid handle was specified.
m_mb.reset();
modbus_set_slave(m_mb.get(),1);
if(modbus_connect(m_mb.get()) == -1)
这实际上与
m_mb.reset();
modbus_set_slave(nullptr,1);
if(modbus_connect(nullptr) == -1)
如果您想释放并将m_mb
重置回新的modbus句柄,您需要这样做
m_mb = boost::shared_ptr<modbus_t>( modbus_new_rtu(m_heatercomport.c_str(),9600,'N',8,1), freemodbus);
再次明确。
相关文章:
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何使用 C 指针的自定义删除器创建unique_ptr?
- 在地图中使用自定义删除器存储unique_ptr
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 在unique_ptr<>中使用自定义删除程序 (curl_formfree())
- C++自定义删除运算符不能正常工作?
- 从自定义数据类型向量中删除重复元素
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 如何在我的类unique_ptr中提供自定义删除器?
- 无法使用带有 std::move 的自定义删除器插入 std::unique_ptr
- 未调用 std::unique_ptr 中的自定义删除器
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- 在 QLayout 中创建和删除自定义 QWidgets 时出现 RAM 问题
- 无法删除自定义类的堆实例 (C++)
- 无法从 QVBoxLayout 中删除自定义 QWidget
- 删除自定义双链表
- 如何在gtkmm中删除自定义TreeModel中的user_data