从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类模板中可能很有用。