扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
练习13.6:
五峰网站建设公司创新互联公司,五峰网站设计制作,有大型网站制作公司丰富经验。已为五峰成百上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的五峰做网站的公司定做!拷贝赋值运算符是类的重载运算符,是类的成员函数,接受一个与其所在类相同类型的参数,返回一个指向其左侧运算对象的引用。
当我们对对象进行拷贝赋值时,会用到拷贝赋值运算符。
对于某些类,合成的拷贝赋值运算用来禁止该类型对象的赋值。如果拷贝赋值运算符并非出于此目的,它会将右侧运算对象的每一个非static成员赋予左侧运算对象的对应成员,这一工作是通过成员类型的拷贝赋值运算符来完成的。
如果一个类未定义自己的拷贝赋值运算符,编译器会为它生成一个合成拷贝赋值运算符。
练习13.7:
StrBlob类和StrBlobPtr类没有定义拷贝赋值运算符,编译器会为这两个类定义合成拷贝赋值运算符。
对于StrBlob类的拷贝赋值,使用智能指针shared_ptr的拷贝赋值运算符来对其成员data进行拷贝赋值,对应内存的引用计数加1
对于StrBlobPtr类的拷贝赋值,使用weak_ptr的拷贝赋值运算符来对其成员wptr进行拷贝赋值,引用计数不变,curr是内置数据类型size_t,直接赋值
练习13.8:
#include#includeusing namespace std;
class HasPtr
{
public:
HasPtr(const std::string& s = std::string()):
ps(new std::string(s)),i(0) { }
//拷贝构造函数
HasPtr(const HasPtr& hp): ps(new std::string(*hp.ps)),i(hp.i) { }
//拷贝赋值运算符
HasPtr& operator=(const HasPtr&);
private:
std::string* ps;
int i;
};
HasPtr& HasPtr::operator=(const HasPtr& ptr)
{
delete ps;
ps = new string(*ptr.ps);
i = ptr.i;
return *this;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流