当前位置:  开发笔记 > 编程语言 > 正文

从shared_ptr获得正常的ptr?

如何解决《从shared_ptr获得正常的ptr?》经验,为你挑选了2个好方法。

我有类似于shared_ptr t(makeSomething(), mem_fun(&Type::deleteMe)) 我现在需要调用需要指针的C样式函数Type.我怎样才能得到它shared_ptr



1> Adam Rosenfi..:

使用get()方法:

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

shared_ptr在库函数完成之前确保你的范围没有超出范围 - 否则可能导致不良,因为库可能会在删除指针后尝试对指针执行某些操作.如果库函数在返回后保留原始指针的副本,请特别小心.



2> Michael Burr..:

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

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

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


该方法将触发NULL指针的断言.不好.
@ acidzombie24 - 我不确定你为什么这么喜欢这个.Get()方法最好在99%或更多的情况下使用.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有