从shared_ptr获取正常的ptr?

问题描述 投票:51回答:3

我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))的内容现在,我需要调用需要指向Type的指针的C样式函数。我如何从shared_ptr获得它?

c++ boost smart-pointers shared-ptr
3个回答
135
投票

使用get()方法:

get()

请确保boost::shared_ptr<foo> foo_ptr(new foo()); foo *raw_foo = foo_ptr.get(); c_library_function(raw_foo); 在完成库函数之前不会超出范围-否则可能会导致问题,因为删除库后库可能会尝试对指针执行某些操作。当库函数返回后保留原始指针的副本时,请特别小心。


32
投票

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

*

虽然我个人更喜欢使用boost::shared_ptr<foo> foo_ptr(new foo()); c_library_function( &*foo_ptr); 方法(这确实是正确的答案),但它的一个优点是可以与重载get()(指针取消引用)的其他类一起使用,但不必提供operator*方法。例如,在通用类模板中可能很有用。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.