从shared_ptr获得正常的ptr?

时间:2009-02-02 22:01:47

标签: c++ boost smart-pointers shared-ptr

我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))的内容 我现在需要调用需要指向Type的C样式函数。如何从shared_ptr获取它?

3 个答案:

答案 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