C++Primer13.1.2节练习

练习13.6:

拷贝赋值运算符是类的重载运算符,是类的成员函数,接受一个与其所在类相同类型的参数,返回一个指向其左侧运算对象的引用。

当我们对对象进行拷贝赋值时,会用到拷贝赋值运算符。

对于某些类,合成的拷贝赋值运算用来禁止该类型对象的赋值。如果拷贝赋值运算符并非出于此目的,它会将右侧运算对象的每一个非static成员赋予左侧运算对象的对应成员,这一工作是通过成员类型的拷贝赋值运算符来完成的。

如果一个类未定义自己的拷贝赋值运算符,编译器会为它生成一个合成拷贝赋值运算符。

练习13.7:

StrBlob类和StrBlobPtr类没有定义拷贝赋值运算符,编译器会为这两个类定义合成拷贝赋值运算符。

对于StrBlob类的拷贝赋值,使用智能指针shared_ptr的拷贝赋值运算符来对其成员data进行拷贝赋值,对应内存的引用计数加1

对于StrBlobPtr类的拷贝赋值,使用weak_ptr的拷贝赋值运算符来对其成员wptr进行拷贝赋值,引用计数不变,curr是内置数据类型size_t,直接赋值

练习13.8:

#include <iostream>
#include <string>
using 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学C++.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值