是否可以将所有权从void *转移到unique_ptr?

阿德里安

我目前正在dlopen某些插件项目中使用这些功能。
该函数句柄返回a void*,然后将所有句柄保存到名为的映射中handles

void* handle = dlopen(path.c_str(), RTLD_LAZY);  
handles[file] = handle;

我的目标是将所有权转让给地图,我当时想的是unique_ptr,但不确定是否可行。

如果不可能,我还有哪些其他选择?

CJCombrink

如果我理解正确,您可以执行类似的操作

定义关闭函数和指针类型的别名:

auto closeFunc = [](void* vp) {
  dlclose(vp);
};
using HandlePtr = std::unique_ptr<void, decltype(closeFunc)>;
std::map<std::string, HandlePtr> handles;

然后创建句柄并添加到地图:

void* handle = dlopen(path.c_str(), RTLD_LAZY); 
HandlePtr ptr( handle, closeFunc );

handles[file] = std::move( ptr );

然后,closeFunc当唯一的ptr超出范围时将被调用

可以通过组合以上两行来防止原始指针:

HandlePtr handle(dlopen(path.c_str(), RTLD_LAZY), closeFunc );
handles[file] = std::move( handle );

这利用了std :: unique_ptr的第二个参数,该参数指定要使用的删除程序。

PS:maps和unique_ptrs不能按原样播放,根据您使用的C ++标准,您可能需要一些进位或移动。shared_ptr改为使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: unique_ptr转移const对象的所有权

复制构造函数以转移unique_ptr的所有权

返回元组时如何转让unique_ptr的所有权?

类型推断和借用与所有权转移

tolua ++:将指针所有权转移到lua gc

shared_ptr,unique_ptr,所有权,在这种特殊情况下我是否过分使用?

如何将值的所有权从Rust转移到C代码?

将std :: unique_ptr传递给构造函数以获取所有权

如何正确地将所有权从原始指针移到std :: unique_ptr?

转移OneDrive文件的所有权

Pybind11:在构造时将类所有权转移到C ++

取得所有权之前先进行std :: unique_ptr测试

命名API是否意味着转移内存所有权?

将原始指针的所有权转移到unique_ptr

unique_ptr所有权疯狂

无法将文件所有权从服务帐户转移到Google Drive用户

RAII是否支持资源所有权转移?

将std :: vector <std :: unique_ptr <int>>的所有权转移到正在构造的类的正确方法

.Xauthority的所有权转移到根

我是否可以使unique_ptr不获取其指向对象的所有权?

Ubuntu不能以正确的所有权将文件移到垃圾箱

转移Splint中的存储所有权

将所有权从std :: vector转移到std :: shared_ptr

将Google Doc附件的所有权转移到另一个帐户?

如何取得std :: unique_ptr和std :: shared_ptr的所有权

Google Drive API (.NET) - 将所有权从服务帐户转移到域用户

转移存储桶的所有权和计费

无法删除 Azure 中的所有权保护以将域转移到 Godaddy

将仓库所有权转移给组织