main.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// for std::move
#include <utility>  
#include <iostream>  
using namespace std;

class MyClass {
public:
    MyClass() { std::cout << "MyClass Constructor" << std::endl; }
    ~MyClass() { std::cout << "MyClass Destructor" << std::endl; }
    void sayHello() const { std::cout << "Hello from MyClass" << std::endl; }
};

int main()
{
    std::unique_ptr<MyClass> ptr1 = std::make_unique<MyClass>();
    //std::unique_ptr<MyClass> ptr3 = std::move(ptr1);  // not valid
    //std::unique_ptr<MyClass> ptr2 = ptr1; // not valid

    std::shared_ptr<MyClass> ptr11 = std::make_shared<MyClass>();
    cout << "count(ptr11): " << ptr11.use_count() << endl; // count: 1
    // std::shared_ptr<MyClass>& ptr13 = std::move(ptr11); // invalid 

    const std::shared_ptr<MyClass>& ptr13 = std::move(ptr11); 
    cout << "count(ptr13): " << ptr13.use_count() << endl; // count: 1

    std::shared_ptr<MyClass>& ptr12 = ptr11;  // does not increase count
    cout << "count(ptr12): " << ptr12.use_count() << endl; // count: 1

    std::shared_ptr<MyClass> ptr14 = ptr11;
    cout << "count(ptr14): " << ptr14.use_count() << endl; // count: 2
    return 0;
}
Back to std_unique_ptr