第十四章 14.7节练习

练习14.30

为你的StrBlobPtr类和再12.1.6节练习12.22(第423页)中定义的ConstStrBlobPtr类分别添加解引用运孙福和箭头运算符。

注意:因为ConstStrBlobPtr的数据成员指向const vector,所以ConstStrBlobPtr中的运算符必须返回常亮引用。

解答:

StrBlobPtr可以参考书中实现。

ConstStrBlobPtr的操作实现可以根据提示和参考书中实现来写

const std::string& ConstStrBlobPtr::operator*() const{
  auto p = check(curr, "some message");
  return (*p)[curr];
}

const std::string* ConstrStrBlobPtr::operator->() const{
  return &(this->operator*());
}

练习14.31

我们的StrBlobPtr类没有定义拷贝构造函数、赋值运算符及析构函数,为什么?

解答:

拷贝构造函数是不需要的,这里是模拟指针的行为,所以没有必要定义拷贝构造函数,编译器自动合成的拷贝构造函数就足够使用了。

赋值操作其实和拷贝构造的情况差不多。

析构函数这里也是没有必要的,因为有价值的数据是wptr,其是交给智能指针进行托管的,在生命周期结束的时候,指针会自行进行释放和销毁。


练习14.32

定义一个类令其含有指向StrBlobPtr对象的指针,为这个类定义重载的箭头运算符。

解答:

class pStrBlobPtr{

public:

  StrBlobPtr& operator*() const{

     return *p;

  }

  StrBlobPtr* operator->() const{

     return &(this->operator*());

  }

private:

  StrBlobPtr *p;

};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值