我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
现在需要调用需要指向Type
. 我如何从中得到它shared_ptr
?
user34537
问问题
85670 次
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 回答