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

Mar*_*tos 5 c++ android templates pointers android-ndk

我正在着手进行一些 Android NATIVE编码(例如 C++,而不是 Java),并且需要使用相当未记录的 sp<>(“强指针”)引用计数指针类。

据我所知,Android sp<> 模板看起来非常像更熟悉的 BOOST shared_ptr<> 模板。标准重新计票机制。它们似乎并不部分兼容。例如,强指针似乎不是线程安全的。两者之间还有哪些其他陷阱?

更广泛的问题是:为什么没有 NDK 的在线参考?他们在developer.android.com 上是否遇到了足够的磁盘空间问题以至于无法容纳该网站?叽。

Dig*_*git 5

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

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

至于其他问题,我不太清楚,但我猜弱指针的实现也与Boost不同。在所有情况下,如果您不明白此代码的作用,请不要使用它,它不适合一般使用。