• 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.  
    14. weak_ptr<Hoge> weakPtr;
    15.  
    16. {
    17. shared_ptr<Hoge> sharedPtr(new Hoge());
    18. cout << "sharedPtr:" << sharedPtr << endl;
    19.  
    20. weakPtr = sharedPtr;
    21.  
    22. // 使用するときは lock() を使って本体があるかを確認
    23. if (shared_ptr<Hoge> tmpPtr = weakPtr.lock()) {
    24. cout << "weakPtr:" << tmpPtr << endl;
    25. } else {
    26. cout << "weakPtr:Nothing!" << endl;
    27. }
    28. }
    29.  
    30. // 既に sharedPtr は破棄されているので参照先がなくなる!
    31. if (shared_ptr<Hoge> tmpPtr = weakPtr.lock()) {
    32. cout << "weakPtr:" << tmpPtr << endl;
    33. } else {
    34. cout << "weakPtr:Nothing!" << endl;
    35. }
    36.  
    37. return 0;
    38. }
    39.