从shared_ptr获得正常的ptr?
我有类似于shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
我现在需要调用C风格的函数,需要一个指向Type
的指针。 我如何从shared_ptr
获取它?
使用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*
(指针解引用)的类一起使用,但是不提供get()
方法。 例如,在generics类模板中可能很有用。