class HasPtr
{
public:
//接受一个(可选的)string参数
HasPtr(const std::string &s = std::string()): //匿名变量
ps(new std::string(s)),i(0) {} //new()分配一个这种类型的内存空间,new[]分配n个这种类型的内存空间
//定义一个拷贝构造函数
HasPtr(const HasPtr &p):
ps(new std::string(*p.ps)),i(p.i){}
//定义一个拷贝赋值运算符
HasPtr& operator=(const HasPtr&);
//定义一个析构函数来释放指针
~HasPtr() { delete ps; }
private:
std::string* ps;
int i;
};
定义拷贝赋值运算符
HasPtr& HasPtr::operator=(const HasPtr& rhs)
{
auto newp = new std::string(*rhs.ps); //拷贝底层string
delete ps; //释放左侧对象原来指向的string内存空间(旧内存)
ps = newp; //从右侧运算对象拷贝数据到本对象
i = rhs.i;
return *this; //返回本对象
}