47 c++ boost smart-pointers shared-ptr
我有类似于shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
我现在需要调用需要指针的C样式函数Type.我怎样才能得到它shared_ptr?
Ada*_*eld 133
使用get()方法:
boost::shared_ptr<foo> foo_ptr(new foo());
foo *raw_foo = foo_ptr.get();
c_library_function(raw_foo);
Run Code Online (Sandbox Code Playgroud)
shared_ptr在库函数完成之前确保你的范围没有超出范围 - 否则可能导致不良,因为库可能会在删除指针后尝试对指针执行某些操作.如果库函数在返回后保留原始指针的副本,请特别小心.
Mic*_*urr 30
另一种方法是使用&和*运算符的组合:
boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);
Run Code Online (Sandbox Code Playgroud)
虽然我个人更喜欢使用这种get()方法(它确实是正确的答案),但它的一个优点是它可以与其他重载operator*(指针取消引用)的类一起使用,但不提供get()方法.例如,可能在泛型类模板中很有用.
| 归档时间: |
|
| 查看次数: |
65611 次 |
| 最近记录: |