#include <iostream>
#include <memory>
int main()
{
{// I Move semantics
std::shared_ptr<int> sptr;
sptr = std::make_unique<int>(5);
std::cout << *sptr << '\n';
}
{// II The same thing
std::shared_ptr<int> sptr;
std::unique_ptr<int> uptr = std::make_unique<int>(5);
sptr = std::move(uptr);
std::cout << *sptr << ", " << bool(uptr) << '\n';
}
{// III Assignment operator is not allowed
// std::shared_ptr<int> sptr;
// std::unique_ptr<int> uptr = std::make_unique<int>(5);
// sptr = uptr;
// std::cout << *sptr << ", " << bool(uptr) << '\n';
}
{// IV Copy ctor is not allowed
// std::unique_ptr<int> uptr = std::make_unique<int>(5);
// std::shared_ptr<int> sptr = uptr;
// std::cout << *sptr << ", " << bool(uptr) << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKaW50IG1haW4oKQp7Cgl7Ly8gSSBNb3ZlIHNlbWFudGljcwoJCXN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHNwdHI7CgkJc3B0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKCQlzdGQ6OmNvdXQgPDwgKnNwdHIgPDwgJ1xuJzsKCX0KCXsvLyBJSSBUaGUgc2FtZSB0aGluZwoJCXN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHNwdHI7CgkJc3RkOjp1bmlxdWVfcHRyPGludD4gdXB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKCQlzcHRyID0gc3RkOjptb3ZlKHVwdHIpOwoJCXN0ZDo6Y291dCA8PCAqc3B0ciA8PCAiLCAiIDw8IGJvb2wodXB0cikgPDwgJ1xuJzsKCX0KCXsvLyBJSUkgQXNzaWdubWVudCBvcGVyYXRvciBpcyBub3QgYWxsb3dlZAovLwkJc3RkOjpzaGFyZWRfcHRyPGludD4gc3B0cjsKLy8JCXN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHVwdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7Ci8vCQlzcHRyID0gdXB0cjsKLy8JCXN0ZDo6Y291dCA8PCAqc3B0ciA8PCAiLCAiIDw8IGJvb2wodXB0cikgPDwgJ1xuJzsKCX0KCXsvLyBJViBDb3B5IGN0b3IgaXMgbm90IGFsbG93ZWQKLy8JCXN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHVwdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7Ci8vCQlzdGQ6OnNoYXJlZF9wdHI8aW50PiBzcHRyID0gdXB0cjsKLy8JCXN0ZDo6Y291dCA8PCAqc3B0ciA8PCAiLCAiIDw8IGJvb2wodXB0cikgPDwgJ1xuJzsKCX0KfQ==