我有一个签名的C函数
ldap_initialize LDAP_P((LDAP **ldp, LDAP_CONST char *url ));
Run Code Online (Sandbox Code Playgroud)
我这样用它
LDAP *ld;
ldap_initialize(&ld, "host_name");
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我想将ld更改为共享指针.
std::shared_ptr<LDAP> ldap(ld, [](LDAP * ld){ ldap_unbind(ld); });
Run Code Online (Sandbox Code Playgroud)
并传递给ldap_initialize.
ldap_initialize(&ldap.get(), "host_name");
Run Code Online (Sandbox Code Playgroud)
但上面的代码不起作用.有没有办法将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); });
}
Run Code Online (Sandbox Code Playgroud)
您无法分配到a的内部状态std::shared_ptr
.这是您在代码示例中尝试执行的操作.