共享指针:在Android的“sp<>”模板和BOOST的“shared_ptr<>”模板之间是否存在任何陷阱差异?

4
我要进行一些Android原生编程(例如,使用C++而非Java),并需要使用相当未记录的“Strong Pointer”引用计数指针类。
据我所知,Android的sp<>模板非常类似于更常见的BOOST shared_ptr<>模板。标准引用计数机制。它们似乎不是部分完全兼容的。例如,强指针似乎不是线程安全的。这两者之间还有哪些需要注意的地方呢?
更广泛的问题是:为什么没有NDK的在线参考?他们在developer.android.com上的磁盘空间问题不够吗?抱怨。
1个回答

4

Android的sp<>未公开文档,因为它是平台的一部分,其实现可能在平台修订之间发生变化。除非将所有头文件和相应的源文件复制到您自己的项目中,否则不应在NDK代码中使用它。

出于性能原因,它是有意不安全的线程:实际上,执行线程安全的引用计数需要添加内存屏障指令,这会显着放慢ARM上的操作(在x86和x86_64上则不是那么明显)。甚至Chrome也使用两个不同的类来实现引用计数(即base::RefCountedbase::RefCountedThreadSafe)。

至于其他的注意事项,我无法确切告知,但我猜测弱指针的实现也与Boost不同。在所有情况下,如果您不理解此代码的作用,请不要使用它,它不适用于一般消费。


谢谢!这正是我在寻找的答案。我还没有代码:我正在查看其他类(例如MediaPlayer),并注意到它们正在使用sp<>。一定会像你建议的那样复制(相对较小的)头文件。谢谢! - Mark Gerolimatos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接