Shared Pointerの特徴です。
- heap内の同じオブジェクトを参照できる
- assignやmoveをすることができる
- arrayの管理はdefaultではできない
- use countが0になった時点でobjectは破棄される
宣言
{ std::shared_ptr<int> p1 {new int{100}}; std::cout << *p1 << std::endl; //100 *p1 = 200; std::cout << *p1 << std::endl; //200 } // automatically deleted
もちろん、独自のclassタイプも使えます
{ std::shared_ptr<my_class> p1 {new my_class{"test"} }; p1->sample_method(); }
便利な関数
use_count()
{ std::shared_ptr<int> p1 {new int{100}}; std::cout << p1.use_count() << std::endl; //1 std::shared_ptr<int> p2 {p1}; std::cout << p2.use_count() << std::endl; //2 p1.reset(); // reset p1 std::cout << p1.use_count() << std::endl; //0 std::cout << p2.use_count() << std::endl; //1 }
make_shared
new宣言無しに、share_ptrを宣言できる。
use_countが0になればobjectは破棄される。
{ std::shared_ptr<int> p1 = make_shared<int>(100); //use_count 1 std::shared_ptr<int> p2 = {p1}; //use_count 2 std::shared_ptr<int> p3; p3 = p1; //use_count 3 }