网站如何防止被攻击,一流的龙岗网站制作,公司注册地址和经营地址,淘客必须做网站练习13.6#xff1a; 拷贝赋值运算符本身是一个重载的赋值运算符#xff0c;定义为类的成员函数#xff0c;左侧运算对象绑定到隐含的this参数#xff0c;而右侧运算对象是所属类类型的#xff0c;作为函数的参数#xff0c;函数返回指向其左侧运算对象的引用。 当对类对…练习13.6 拷贝赋值运算符本身是一个重载的赋值运算符定义为类的成员函数左侧运算对象绑定到隐含的this参数而右侧运算对象是所属类类型的作为函数的参数函数返回指向其左侧运算对象的引用。 当对类对象进行赋值时会使用拷贝赋值运算符。 通常情况下合成的拷贝赋值运算符会将右侧对象的非static成员逐个赋予左侧对象的对应成员这些赋值操作是由成员类型的拷贝赋值运算符来完成的。 若一个类未定义自己的拷贝赋值运算符编译器就会为其合成拷贝赋值运算符完成赋值操作但对于某些类还会起到禁止该类型对象赋值的效果。
练习13.7:
由于两个类都未定义拷贝赋值运算符因此编译器为它们定义了合成的拷贝赋值运算符。 与拷贝构造函数的行为类似赋值一个StrBlob时赋值其唯一的成员data使用shared_ptr的拷贝赋值运算符来完成因此其引用计数增加1。 赋值一个StrBlobPtr时赋值成员wptr用weak_ptr的拷贝赋值运算符进行赋值引用计数不变然后赋值curr直接进行内存复制。
练习13.8:
HasPtrHasPtr::operator(const HasPtr rhs)
{auto newps new string(*rhs.ps);//拷贝指针指向的对象delete ps;//销毁原stringps newps;//指向新stringi rhs.i;//使用内置的int赋值return *this;//返回一个此对象的引用
}