如何使用unique_ptr的值迭代地图字符串键?

时间:2019-05-27 08:24:07

标签: c++ c++11 unique-ptr

这是this一个的后续问题。

我正在使用dlopendlclose函数来加载/卸载共享库。 (它们都返回void *)。
我将dlopen句柄保存在字典中。
每次从地图中删除元素时,应自动调用dlclose函数。

这就是我所拥有的:

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

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

我的问题是,当我想遍历地图的键(字符串)并打印它们时,它迫使我取地址:

vector<string> SharedLibrary::GetLoadedLibraries() {
    vector<string> loadedLibraries;

    for(auto& kv: handles) {
        loadedLibraries.push_back(kv.first);
    }

    return loadedLibraries;
}

因此,当loadLibraries超出范围时,它将清除我的地图。
如果我不引用该文件,则会出现编译错误“ using a deleted function”。

对此我有点困惑。从地图检索密钥的正确方法是什么?

0 个答案:

没有答案