"強いポインタ"と "弱いポインタ"という概念と混同しています。 ダイアン・ハックボーン自身が言った:強いポインタと弱いポインタとは
強力なポインタがある間、オブジェクトは周囲に残ります。最後のものが解放されると、それは 破壊されます。あなたが弱い ポインタで行うことができるのは、比較であり、強力なポインタに昇格しようとすることです。 オブジェクトに他の強力なポインタがない場合、後者は失敗します。
どちらが私にはっきりしていません。強力なポインタは、(boost::
)の共有ポインタと同等ですか?また、強力なポインタに自分自身を宣伝しようとしている場合、弱いポインタの役割は何ですか?私たちはいつ弱く強い指針を必要としますか?
更新:
はあなたにみんなありがとう、私はAndroidのカーネルsp
とwp
について特に求めている、と彼らはすべてのJavaの参照とは何の関係もありません。
基本的に私はここにhttp://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html をコードを解読しようとしていると、本当にsp
の使用を理解していないとwp
更新:
実際の答えは受け入れられたのコメントであります回答。ゲイブSechanのおかげ:
強いと弱いポインタは 異なるスマートポインタの実装であり、ポインタがスコープの外に出るときに、同じthing-について何、少なくとも一つの強力なポインタ参照する限り それはそれはしません解放される。 弱いポインタ(または何もない)だけが参照される場合、それはそうです。このチェックは、強参照または弱参照が解読されるたびに行われる です。
同じオブジェクトを参照している弱いポインタが10個ある場合は のうちの1つが範囲外になり、オブジェクトが破棄されますか? の強力なポインタでは、10個のスコープがすべてスコープから外れる場合にのみ、 オブジェクトが破棄されますか?
はい、ほとんどです。あなたが持っているものがすべて弱いポインタである場合、最後に強いポインタがスコープの になったときに、すでに がスコープから外れている可能性があります。この実装では少しのメモリしか持たないかもしれません スペアメモリがある場合は長くなりますが、 にメモリが足りない場合は切り捨てられ、 の実装は彼女の見積もりよりも進んでいるようです。そしてこれを使用するのは依然として ですが、これは主にキャッシングです。これは、boost_firstr とboost_wptrとおおよそ同等です。だから、基本的に、弱いポインタは、オブジェクトがいつでも離れて行く参照 を持つことができます。
+1この概念を説明するために+1 – miller