c++ - 将 shared_ptr 作为指向指针的指针传递

标签 c++ pointers

我有一个 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/

相关文章:

c++ - 同时使用多个线程C++

c++ - 如何从 if 语句中取出 "break"?

c++ - 如何将 unique_ptr 移动到原始指针?

C 如何使用带比较器功能的快速排序

c - 如何将动态数组发送到(内核模块)中的 copy_to_user

c++ - Qt C++ - 删除 QTableWidget 中的行

c# - 从 c# COM dll 返回时,C++ SAFEARRAY 具有无效数据

c++ - 检测声音缓冲区是否充满数据

c++ - boost::threadpool::pool vs.boost::thread_group

c - 关于动态分配字符串的一个小问题,我该如何解决?