练习13.51
虽然 unique_ptr 不能拷贝,但我们在12.1.5节中编写了一个 clone 函数,它以值的方式返回一个 unique_ptr。解释为什么函数是合法的,以及为什么它能正确工作。
在这里是移动的操作而不是拷贝操作,因此是合法的。
练习13.52
详细解释第478页中的 HasPtr 对象的赋值发生了什么?特别是,一步一步描述 hp、hp2 以及 HasPtr 的赋值运算符中的参数 rhs 的值发生了什么变化。
左值被拷贝,右值被移动。
练习13.53
从底层效率的角度看,HasPtr 的赋值运算符并不理想,解释为什么?为 HasPtr 实现一个拷贝赋值运算符和一个移动赋值运算符,并比较你的新的移动赋值运算符中执行的操作和拷贝并交换版本中的执行的操作。
头文件
#ifndef CP5_ex13_53_h
#define CP5_ex13_53_h
#include <string>
class HasPtr
{
public:
friend void swap(HasPtr&, HasPtr&);
HasPtr(const std::string &s = std::st