Android 智能指针 视频,Android系统智能指针中轻量级指针
lp、sp、wp在Android Native層中被大量使用,所以非常有必要學習它們的實現原理。lp是Light Pointer的縮寫,表示輕量級指針,sp是Strong Pointer的縮寫,表示強指針,wp是Weak Pointer的縮寫,表示弱指針。在Android系統中,智能指針包括輕量級指針lp(Light Pointer)、強指針sp(Strong Pointer)和弱指針wp(Weak Pointer)這三種。但無論是輕量級指針、強指針還是弱指針,它們的實現原理都一樣,即都由對象本身來作為引用計數值,但是對象本身不會去維護這個引用計數值,而是由智能指針來維護。
那么為什么Android中要實現這個智能指針呢?
我們都知道,在Native開發中,如果new了一個對象,使用完之后忘記delete該對象,就會造成內存泄漏。即使沒有忘記delete這個對象,也有可能delete了它之后,其他地方還繼續使用原來指向它的指針,造成系統崩潰。
為了避免這兩個問題,Android系統的智能指針就出現了。它的做法是:使用引用計數的方法,每當有一個指針指向一個新new出來的對象時,就對該對象的引用計數值增加1,每當有一個指針不再使用這個對象時,就對該對象的引用計數值減少1,當減1之后,如果發現引用計數值為0,就delete該對象,這樣就避免了忘記delete對象或者這個對象被delete之后還在其他地方使用的問題。而加1和減1的工作就是由Android的智能指針來做的。我們知道,在C++中,對象的創建和消亡會分別調用它的構造函數和析構函數,所以加1和減1的工作,實際上就放到了智能指針對象的構造函數和析構函數里,這也是稱這個指針對象為智能指針的原因。
輕量級指針(lp)它的源代碼定義如下:
變量mCount是引用計數值,初始值為0,而incStrong()函數和decStrong()函數就是用于維護引用計數器值。incStrong()函數中調用android_atomic_inc()函數加1操作,而在decStrong()函數中調用android_atomic_dec()函數減1操作,如果引用計數值mCount為1,當減1后,值就是0,于是就delete這個對象。這里要說明的是,android_atomic_inc()函數和android_atomic_dec()函數都是原子操作。
而關于lp的使用,它要和強指針(sp)配合起來一塊用,比如:
此處首先定義一個子類XXXClass,繼承LightRefBase模板類。在XXXClass的main()函數里,首先new一個XXXClass對象,然后把這個對象賦值給智能指針lpointer,這時候引用計數值就為1,接著在main()函數里做一些工作。當main()函數做完工作之后,退出main()函數的時候,lpointer會被析構,而析構的時候,引用計數值減1之后就為0,于是,它會被delete。下面重點來看看sp,因為sp最常見。
舉報/反饋
總結
以上是生活随笔為你收集整理的Android 智能指针 视频,Android系统智能指针中轻量级指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XPath函数——字符串函数
- 下一篇: 获得主机域名及其IP和Port端口