将shared_ptr作为指针指向

Yog*_*tel 1 c++ pointers

我有一个签名的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样式指针传递给指针.

Sto*_*ica 5

你倒退了.您初始化一个原始指针并将其传递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.这是您在代码示例中尝试执行的操作.

  • 没有std :: string?没有咖啡给你. (3认同)
  • 没有,我只是觉得唠叨,因为咖啡机是空的. (2认同)
  • @RickAstley它让你失望,它让你失望. (2认同)