以下のコードは実行時エラーを引き起こします。shared_ptrで参照カウントが機能しない
各shared_ptr
は同じメモリを保持しますが、それぞれのカウントは1です。
したがって、共有ポインタはそれぞれ異なるため、範囲外になるとブロックを解放しようとするため、ヒープが破損します。私の質問はこれを避ける方法ですか?
はちょうど私がそれを宣言しなければならない非交渉でこの
shared_ptr<int> x(p);
のような宣言を追加します。
#include <iostream>
#include <memory>
using namespace std;
int main()
{
int* p = new int (10);
shared_ptr<int> a (p);
shared_ptr<int> b (p);
shared_ptr<int> c (p);
shared_ptr<int> d (p);
cout<<"Count : "<<a.use_count()<<endl;
cout<<"Count : "<<b.use_count()<<endl;
cout<<"Count : "<<c.use_count()<<endl;
cout<<"Count : "<<d.use_count()<<endl;
return 0;
}
'shared_ptr b = a;'など?それは実際に* shared *ポインタを持つ唯一の方法です。そうでなければ、新しいスマートポインタをまったく使用しないかもしれません。 –
また、単にスマートポインタを「自己削除ポインタ」と見なすのではなく、*所有権*の観点から見ることをお勧めします。リソースや物は一度に1人の所有者しか持てませんか?そして 'std :: unique_ptr'を使います。リソースや物に複数の同時所有者がいますか?次に 'std :: shared_ptr'を使います。 –
最後に、プログラミングでは* nothing *は "non negotiable"です。現在使用しているプログラミング言語やフレームワークの機能が要件に合わない場合は、要件または言語/フレームワークのいずれかを変更する必要があります。 –