' P '

whatever I will forget

C++ Smart Pointer - Shared Pointer

Shared Pointerの特徴です。

  1. heap内の同じオブジェクトを参照できる
  2. assignやmoveをすることができる
  3. arrayの管理はdefaultではできない
  4. 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
}