- ベストアンサー
参照カウントについてその2
参照カウントについて聞きたいのですが、これは、同じオブジェクトへのポインタがシステム全体にいくつあるかを数えるのでしょうか?例えば、ポインタAとポインタBがある時、オブジェクトCにポインタAとポインタBが指しているということでよろしいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>では、オブジェクトCにポインタA、Bが指されたときカウントが2増えるそして、ポインタAが破棄されたら参照カウントがカウントダウンしてカウントダウンした時点で参照カウントが0ならオブジェクトを破棄するということでよろしいのでしょうか? (1)ポインタA→オブジェクトC(参照カウント=1) (2)ポインタB→オブジェクトC(参照カウント=2) (3)ポインタB破棄(参照カウント=1) (4)ポインタA破棄(参照カウント=0)。オブジェクトC破棄。 と言う意味で聞いているならYESです。 >オブジェクトCにポインタA、Bが指されたとき この日本語のクセ直りませんかんね?もしくは私の言ったことが分ってもらえてないですかね。 こういう日本語文体の組み立てが先天的に苦手な人がいるのは理解しているので無理にとは言いませんが。
その他の回答 (3)
- zwi
- ベストアンサー率56% (730/1282)
>もしくはオブジェクトC,DポインタA,Bがある時、オブジェクトCにポインタAをそしてオブジェクトDにポインタBが指されているとき参照カウンタが2増えるということでしょうか? えーと意味を汲み取ると、 ポインタA→オブジェクトC ポインタB→オブジェクトD ですよね? 見たとおりオブジェクトCとオブジェクトDの参照カウントは1ですよね。1個のオブジェクトに1個のポインタですし。 ちなみに参照カウンタはオブジェクト毎に持ってますよ。
お礼
では、オブジェクトCにポインタA、Bが指されたときカウントが2増えるそして、ポインタAが破棄されたら参照カウントがカウントダウンしてカウントダウンした時点で参照カウントが0ならオブジェクトを破棄するということでよろしいのでしょうか?わかりました。回答ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
>オブジェクトCにポインタA、Bが指されたとき 細かい点ですが「ポインタA、BがオブジェクトCを指した時」なら正しいと思いますが、書かれている言葉通りに取るとオブジェクトCはポインタでは無いので指すことはできません。 例えば、 1.通行人Cに通行人Aと通行人Bが指差された。 2.通行人Cを通行人Aと通行人Bが指差した。 では意味がまったく違いますよね。 そういう意味で >オブジェクトCにポインタAとポインタBが指している も日本語として意味が不明瞭です。 逆に質問しますが、ポインタAとポインタBはオブジェクトCのポインタですよね?
お礼
言葉が下手で申し訳ありません。そうです。ポインタAとポインタBはオブジェクトCのポインタです。あっているのでしょうか?
- zwi
- ベストアンサー率56% (730/1282)
参照カウントを実装している言語なら、ポインタに値を入れた時点でポインタが参照しているオブジェクトの参照カウント数をアップします。逆にポインタが破棄されたら対象オブジェクトの参照カウントをカウントダウンします。カウントダウンした時点で参照カウントが0ならオブジェクトを破棄します。って事です。 C言語のポインタとは大分と実装が違います。
お礼
回答ありがとうございます。では、オブジェクトCにポインタA、Bが指されたときカウントが2増えるそして、ポインタAが破棄されたら参照カウントがカウントダウンしてカウントダウンした時点で参照カウントが0ならオブジェクトを破棄するということでよろしいのでしょうか?
補足
もしくはオブジェクトC,DポインタA,Bがある時、オブジェクトCにポインタAをそしてオブジェクトDにポインタBが指されているとき参照カウンタが2増えるということでしょうか?
お礼
回答ありがとうございます。コピペでやってしまってて直すの忘れていました。今後気をつけます。