unique_ptrは、C++11で導入されたスマートポインタの一種で、とあるunique_ptrが指すリソースの所有権は1つのポインタしか持つことができない(現在はそのunique_ptrのみが持つ)という特徴がある。
unique_ptr - cpprefjp C++日本語リファレンス
test.hで、
test.cppで、
となるclass_testを定義する。
main.cppでは、
new class_test(10)で生成したポインタをすぐunique_ptrのp1の初期化に渡す。
スマートポインタの特徴として、メモリリソースの解放はスマートポインタがやってくれるので、deleteが無くても気にしなくていい。
あとは、p1はポインタのように扱うことができる。
そして、std::moveでunique_ptrのp2にムーブした時どうなるだろうか。
$ vi main.cpp $ g++ -o main main.cpp test.cpp -std=c++11 $ ./main class_test::class_test(10) x_ = 10 x_ = 10 p1 is false! class_test::~class_test() $
p1自身がリソースを持っているかを判定できるので、ここでfalseになるということはp1にリソースはなく、p2に移ったということがわかる。
つまり、リソースは唯一である。
Sample/cpp/unique_ptr/unique_ptr/src/unique_ptr at master · bg1bgst333/Sample · GitHub