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