我有一个 C 函数,其签名是
ldap_initialize LDAP_P((LDAP **ldp, LDAP_CONST char *url ));
我是这样用的
LDAP *ld;
ldap_initialize(&ld, "host_name");
它工作正常。
我想像这样将 ld 更改为共享指针。
std::shared_ptr<LDAP> ldap(ld, [](LDAP * ld){ ldap_unbind(ld); });
并传递给 ldap_initialize。
ldap_initialize(&ldap.get(), "host_name");
但是上面的代码不起作用。 有没有办法将 shared_pointer 或 unique_ptr 作为 c 样式指针传递给指针。
最佳答案
你搞反了。您初始化一个原始指针并将其传递给 std::shared_ptr
以管理:
auto get_shared_ldap(char const* url) {
LDAP *ld;
ldap_initialize(&ld, url);
if (/*error occured*/) {
// Consider throwing something
return std::shared_ptr<LDAP>{};
}
return std::shared_ptr<LDAP>(ld, [](LDAP * ld){ ldap_unbind(ld); });
}
您不能分配给 std::shared_ptr
的内部状态。这就是您在代码示例中尝试执行的操作。
关于c++ - 将 shared_ptr 作为指向指针的指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979002/