60

我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe)) 现在需要调用需要指向Type. 我如何从中得到它shared_ptr

4

3 回答 3

150

使用get()方法:

boost::shared_ptr<foo> foo_ptr(new foo());
foo *raw_foo = foo_ptr.get();
c_library_function(raw_foo);

确保您shared_ptr在库函数完成之前不会超出范围 - 否则可能会导致错误,因为库可能会在指针被删除后尝试对指针执行某些操作。如果库函数在返回后保留原始指针的副本,请特别小心。

于 2009-02-02T22:04:50.530 回答
36

另一种方法是使用&*运算符的组合:

boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);

虽然我个人更喜欢使用该get()方法(这确实是正确的答案),但它的一个优点是它可以与其他重载的类一起使用operator*(指针取消引用),但不提供get()方法。例如,在通用类模板中可能很有用。

于 2009-02-02T22:41:11.563 回答
1

对于 std::shared_ptr (C++11 及更高版本),还有一个获取原始指针的 get 方法。关联

于 2020-05-05T04:05:32.943 回答