[過去ログ] Boostを語れゴラァ part3 (1001レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
581
(2): 2007/01/11(木)07:38 AAS
shared_ptr<A> hoge(new A);
int i = 1;
while(i--){
shared_ptr<A> hogehoge(new A);
hoge = hogehoge;
cout << hoge.use_count() << endl;
}
cout << hoge.use_count() << endl;

こういう状態のとき、二番目のhoge.use_count()のときにはカウントが
一番目より一つ減るでしょ。それをhogeのカウンタはどうやって把握したの?
ってことを聞きたかったんです。
カウンタのデクリメントについては、ソースを読めば代入演算子の
部分で、代入元をインクリメントして代入先をデクリメントするってことが
書いてあるけど、代入したオブジェクトそのものが上のコードみたいに
スコープはずれて消えたときにデクリメントする処理なんて書いてないな、
と思ったんです。

>>580

代入元のデストラクタですか?
どうやって代入元のデストラクタで、shared_ptrのカウントを下げてるか分かりますか??
582: 2007/01/11(木)08:09 AAS
>>581
カウンタもshared_ptrが保持するポインタと同じく共有されるよ。
shared_ptr<A> hogehoge(new A); //カウント1
hoge = hogehoge; //カウント2
} //hogehogeの破棄によってカウント1
その後hogeの破棄時にカウントが0になるのでdeleteが呼ばれる。
584
(1): 2007/01/11(木)09:41 AAS
>>581
もうね、
> int i = 1
> while(i--){
の時点でC++理解してなさすぎ。

{
  shared_ptr<A> hogehoge(new A);
  hoge = hogehoge;
  cout << hoge.use_count() << endl;
}

これだけでスコープ限定できるの。
boostを理解しようなんて百年早い。
基礎からやり直しな。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.291s