我有一个类似boost::shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))的东西,我现在需要调用一个C风格的函数,它需要一个指向Type的指针。我如何从boost::shared_ptr得到它?
boost::shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
Type
boost::shared_ptr
7gyucuyw1#
使用get()方法:
get()
boost::shared_ptr<foo> foo_ptr(new foo()); foo *raw_foo = foo_ptr.get(); c_library_function(raw_foo);
确保shared_ptr在库函数使用它之前没有超出作用域--否则可能会导致不好的结果,因为库可能会在指针被删除后试图对指针做一些事情。如果库函数在返回后保留了原始指针的副本,则要特别小心。
shared_ptr
pjngdqdw2#
另一种方法是使用&和*运算符的组合:
&
*
boost::shared_ptr<foo> foo_ptr(new foo()); c_library_function( &*foo_ptr);
虽然我个人更喜欢使用get()方法(这确实是正确的答案),但它的一个优点是它可以与其他重载operator*(指针解引用)但不提供get()方法的类一起使用。例如,在泛型类模板中可能很有用。
operator*
kcwpcxri3#
对于std::shared_ptr(C++11以上),也有一个get方法来获取原始指针。link
3条答案
按热度按时间7gyucuyw1#
使用
get()
方法:确保
shared_ptr
在库函数使用它之前没有超出作用域--否则可能会导致不好的结果,因为库可能会在指针被删除后试图对指针做一些事情。如果库函数在返回后保留了原始指针的副本,则要特别小心。pjngdqdw2#
另一种方法是使用
&
和*
运算符的组合:虽然我个人更喜欢使用
get()
方法(这确实是正确的答案),但它的一个优点是它可以与其他重载operator*
(指针解引用)但不提供get()
方法的类一起使用。例如,在泛型类模板中可能很有用。kcwpcxri3#
对于std::shared_ptr(C++11以上),也有一个get方法来获取原始指针。link