练习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;
};