我有类似于shared_ptr
我现在需要调用需要指针的C样式函数Type
.我怎样才能得到它shared_ptr
?
使用get()
方法:
boost::shared_ptrfoo_ptr(new foo()); foo *raw_foo = foo_ptr.get(); c_library_function(raw_foo);
shared_ptr
在库函数完成之前确保你的范围没有超出范围 - 否则可能导致不良,因为库可能会在删除指针后尝试对指针执行某些操作.如果库函数在返回后保留原始指针的副本,请特别小心.
另一种方法是使用&
和*
运算符的组合:
boost::shared_ptrfoo_ptr(new foo()); c_library_function( &*foo_ptr);
虽然我个人更喜欢使用这种get()
方法(它确实是正确的答案),但它的一个优点是它可以与其他重载operator*
(指针取消引用)的类一起使用,但不提供get()
方法.例如,可能在泛型类模板中很有用.