Big& operator=(const Big& b) { std::cout << "operator=(const Big&) [copy assign]\n"; s = b.s; return *this; } Big& operator=(Big&& b) noexcept { std::cout << "operator=(Big&&) [move assign]\n"; s = std::move(b.s); return *this; } };
intmain(){ Big a("hello"); Big b = a; // 拷贝构造 std::cout<<"a.s"<<a.s<<std::endl; std::cout<<"b.s"<<b.s<<std::endl; Big c = std::move(a); // 移动构造(a.s 资源被搬走) std::cout<<"c.s"<<c.s<<std::endl; std::cout<<"a.s"<<a.s<<std::endl; Big d; d = b; // 拷贝赋值 Big e; e = std::move(b); // 移动赋值 std::cout<<"c.s"<<c.s<<std::endl; std::cout<<"a.s"<<a.s<<std::endl; std::cout<<"d.s"<<d.s<<std::endl; std::cout<<"b.s"<<b.s<<std::endl; std::cout<<"e.s"<<e.s<<std::endl; }