我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
的内容现在,我需要调用需要指向Type
的指针的C样式函数。我如何从shared_ptr
获得它?
使用get()
方法:
get()
请确保boost::shared_ptr<foo> foo_ptr(new foo());
foo *raw_foo = foo_ptr.get();
c_library_function(raw_foo);
在完成库函数之前不会超出范围-否则可能会导致问题,因为删除库后库可能会尝试对指针执行某些操作。当库函数返回后保留原始指针的副本时,请特别小心。
另一种方法是使用shared_ptr
和&
运算符的组合:
*
虽然我个人更喜欢使用boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);
方法(这确实是正确的答案),但它的一个优点是可以与重载get()
(指针取消引用)的其他类一起使用,但不必提供operator*
方法。例如,在通用类模板中可能很有用。
对于std :: shared_ptr(从C ++ 11开始),也有一个get方法来获取原始指针。 get()