将解引用的智能指针的地址传递给需要原始指针的函数

Max*_*and 9 c++ smart-pointers

(假设我正在使用一个需要使用原始指针的库或框架,)

使用拥有一些数据的智能指针,然后将解除保护的智能指针的地址传递给需要原始指针的函数是否有效?

lub*_*bgr 7

是的,这是有效的做法。该std智能指针有一个get()成员函数正是为了这个目的。

一般来说,当你通过智能指针管理一个对象时,当这些函数暗示所有权语义时,你应该只将整个智能指针对象按原样传递给其他函数:如果一个函数将复制 a std::shared_ptr,它应该按值接受它。类似的std::unique_ptr。更常见的是,一个函数与所有权没有任何关系,它只是想对传递给它的数据和/或行为采取行动。然后,您的第一选择应该是采用(const-qualified)引用,因为它没有额外的nullptr-state 指针。否则,一个指针就好了。

长话短说:如果您处理的 API 接受原始指针并且不对它执行任何与所有权相关的操作(删除它、复制指针),那么传递.get()给它就可以了。


Que*_*tin 5

只要函数不希望获得数据的所有权,当然。

事实上,这也是你应该如何设计你自己的函数:当且仅当它应该参与指针对象的所有权时,在接口中使用智能指针。