#include #include #include class Airplane { public: explicit Airplane(const std::string & name_) : name{name_} { std::cout << "Construct Airplane name = " << name << '\n'; } const std::string & get_name() const { return name; } ~Airplane() { std::cout << "Destruct Airplane name = " << name << '\n'; } private: const std::string name; }; // std::unique_ptr process_airplane(std::unique_ptr airplane); // // u_p_airplane = process_airpalne(std::move(u_p_airplane)); int main() { std::shared_ptr a1; auto a2 = std::make_shared("DC8"); a1 = a2; std::cout << a1->get_name() << '\n'; std::cout << a2->get_name() << '\n'; std::cout << "Count a1: " << a1.use_count() << " a2: " << a2.use_count() << '\n'; std::shared_ptr a3; a3 = std::move(a1); std::cout << "Count a1: " << a1.use_count() << " a2: " << a2.use_count() << " a3: " << a3.use_count() << '\n'; auto a4 = std::make_unique("Mig21"); std::shared_ptr a5; a5 = std::move(a4); u_p = std::move(s_p); }