首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用ty胡枝子结构增强shared_ptr

用ty胡枝子结构增强shared_ptr
EN

Stack Overflow用户
提问于 2015-09-09 19:38:07
回答 2查看 491关注 0票数 1

我有编译[医]二线菌的问题。我有以下代码

代码语言:javascript
复制
boost::shared_ptr <modbus_t> ctx;
ctx->modbus_new_tcp(ip_address.c_str(), modbus_port);

但是我得到了以下错误

代码语言:javascript
复制
error: invalid use of incomplete type 'struct _modbus'

它指向modbus.h中的这条线。

代码语言:javascript
复制
typedef struct _modbus modbus_t;

我对此不太了解,无法解决我的问题。你觉得那是什么?这个库不可以与智能指针相比较吗?他们告诉你要使用普通指针

代码语言:javascript
复制
modbus_t* ctx;

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-09 20:28:53

事实上,这似乎是一个C风格的API,在这里,他们将modbus_t的实现完全隐藏在用户面前(因为您传递指向空闲函数的指针,而不是调用对象成员)。

这意味着您不能开箱即用shared_ptr (因为它需要定义来调用delete,这也恰好是要进行的错误调用)。可能有一种方法可以使用自定义删除器来调用适当的清理函数(可能是modbus_free)。然后,您必须在任何时候调用.get()来获取原始指针。

票数 1
EN

Stack Overflow用户

发布于 2015-09-09 21:51:39

你可以--也许--需要

代码语言:javascript
复制
if (std::unique_ptr<modbus_t, void(*)(modbus_t*)> mb(modbus_new_tcp(ip_address.c_str(), modbus_port), &modbus_free)) {

    modbus_connect(mb);

    /* Read 5 registers from the address 0 */
    modbus_read_registers(mb, 0, 5, tab_reg);

    modbus_close(mb);
} // modbus_free invoked, even in the case of exception.

当然,这是假定有独特的所有权。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32487853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档