获取智能指针的指针指针

tam*_*bre 5 c++ pointers smart-pointers unique-ptr

我有一个对象的智能指针,我需要传递给一个只接受指针指针的方法.

这是一个例子,原始智能指针失去了所有权.

int main(int argc, char* argv[])
{
    std::unique_pointer<pcap_if_t> object;

    auto object_pointer = object.get();
    pcap_findalldevs(&object_pointer, ...); // The unique_ptr loses ownership after being passed to the function
}
Run Code Online (Sandbox Code Playgroud)

如果没有原始智能指针丢失指针所有权,我将如何实现这一目标?

编辑:
我正在调用的函数是libpcap中的pcap_findalldevs.我担心这个功能可能是失去所有权的原因.
我已经更新了我的代码示例以反映我实际做的事情.

Rev*_*lot 6

将指针指向指针的函数通常会这样做,因为它可能会改变它,并且pcap_findalldevs确实是这样做的.并且应该通过调用释放该指针pcap_freealldevs.

所以你最好的选择是unique_ptr自定义删除器从原始指针获取所有权:

struct pcap_deleter
{
    void operator()(pcap_if_t* ptr) 
    {
        pcap_freealldevs(ptr);
    }
};

//...
using pcap_ptr = std::unique_ptr<pcap_if_t, pcap_deleter> 
pcap_ptr get_devs() {
    pcap_if_t* object_pointer;
    pcap_findalldevs(&object_pointer, ...); 
    return pcap_ptr(object_pointer);
}

//...

auto object = get_devs();
Run Code Online (Sandbox Code Playgroud)