从条款13创建一个智能指针:
std::shared_ptr<Investment> pInv(creatInvestment());
假设你希望某个函数处理Investment对象:
int daysHeld(const Investment* pi)
然后想要这么调用int days = daysHeld(pInv)
,但是通不过编译,*因为daysHel需要的是Investment 指针,但是传过去的却是一个类型为std::shared_ptr<Investment>
的对象;解决办法有两个:显式转换:get成员函数
int days = daysHeld(pInv.get());
隐式转换:考虑下面用于字体的RAII class
FontHandle getFont();
void releaseFont(FontHandle fh);
class Font {
public:
explicit Font(FontHandle fh) : f(fh) {}
~Font() {
releaseFont(f);
}
private:
FontHandle f;
};
假设有将Font对象转换为FontHandle这样一种需求,一个办法是像get
那样提供显式转换
class Font {
public:
FontHandle get() const {
return f;
}
};
另一个办法就是提供隐式转换函数:
class Font {
...
operator FontHandle() const {
return f;
}
...
};
Font f(getFont());
int newFontSize();
changFontSIze(f, newFontSize); // 将Font隐式转化为FontHandle