• Source
    1. #include <iostream>
    2. #include <memory>
    3. #include <vector>
    4. using namespace std;
    5.  
    6. class Hoge {
    7. public:
    8. Hoge() { cout << "Create Hoge!" << endl; }
    9. ~Hoge() { cout << "Delete Hoge!" << endl; }
    10. };
    11.  
    12. int main() {
    13. // unique_ptr と shared_ptr の違い
    14.  
    15. shared_ptr<Hoge> dstSharedPtr;
    16.  
    17. {
    18. unique_ptr<Hoge> uniquePtr(new Hoge());
    19.  
    20. shared_ptr<Hoge> srcSharedPtr(new Hoge());
    21. cout << "srcPtr:" << srcSharedPtr << endl;
    22.  
    23. dstSharedPtr = srcSharedPtr; // このコピーで所有権が共有される
    24.  
    25. // このスコープを抜けるとuniquePtr, srcShardPtrは両方破棄される。
    26. // uniquePtr で管理されている領域はこの瞬間に delete される。
    27. // 一方 srcSharedPtr は dstSharedPtr と所有権を共有したため
    28. // このタイミングではまだ delete されない。
    29. }
    30.  
    31. // srcPtr と dstPtr が領域を指していることがわかる
    32. cout << "dstPtr:" << dstSharedPtr << endl;
    33.  
    34. // この return のタイミングで dstSharedPtr で管理されていた領域が delete される。
    35. return 0;
    36. }
    37.