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.我担心这个功能可能是失去所有权的原因.
我已经更新了我的代码示例以反映我实际做的事情.
将指针指向指针的函数通常会这样做,因为它可能会改变它,并且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)