#include <iostream>
#include <memory>

using namespace std;

struct MyClass
{
    MyClass() { cout << "MyClass ctor runned." << endl; }
    ~MyClass() { cout << "MyClass dtor runned." << endl; }
};

int main() 
{
    unique_ptr<MyClass> up1(new MyClass);
    up1 = make_unique<MyClass>();  // since C++14
	
    {
        cout << "Entered inner block." << endl;
        unique_ptr<MyClass> up2(new MyClass);
 
        //up1 = up2;		  // Syntax error
        up1 = move(up2);  // Ownership moved from up2 to up1
        up2.reset();	    // No memory deallocation
        cout << "Leaving inner block." << endl;
    }
    cout << "Left inner block." << endl;
 
    up1.reset();		    // Memory deallocation
    cout << "Leaving main() function." << endl;
    
    return 0;
} 