#include <iostream>

class A
{
public:
    A(std::string str) 
        : m_data(str)
    {
        std::cout << "Ctor" << std::endl;
    }

    A(const A& rhs)
    : m_data(rhs.m_data) 
    { 
        std::cout << "Copy ctor" << std::endl;
    }
    
    A(A&& rhs) noexcept
    : m_data(std::move(rhs.m_data))
    {
        std::cout << "Move ctor" << std::endl;
    }

    void print()
    {
        std::cout << m_data << std::endl;
    }

private:
    std::string m_data;
};


int main()
{
    A one("one");
    A two(one);

    A three  = std::move(one);
    
    one.print();
    two.print();
    three.print();

    return 0;
}
