c++ 是否从boost::shared_ptr获取正常ptr?

0tdrvxhp  于 2022-12-01  发布在  其他
关注(0)|答案(3)|浏览(208)

我有一个类似boost::shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))的东西,我现在需要调用一个C风格的函数,它需要一个指向Type的指针。我如何从boost::shared_ptr得到它?

7gyucuyw

7gyucuyw1#

使用get()方法:

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

确保shared_ptr在库函数使用它之前没有超出作用域--否则可能会导致不好的结果,因为库可能会在指针被删除后试图对指针做一些事情。如果库函数在返回后保留了原始指针的副本,则要特别小心。

pjngdqdw

pjngdqdw2#

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

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

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

kcwpcxri

kcwpcxri3#

对于std::shared_ptr(C++11以上),也有一个get方法来获取原始指针。link

相关问题