在资源管理类中提供对原始资源的访问
class A {... }; int day(const A* ptr) {... } int main() {shared_ptr<A> ptr(new A);cout << day(ptr) << endl; }
这样写是错误的。因为day函数要求的参数是指针,而你传的实际上是一个对象。
如何解决呢?
cout << day(ptr.get()) << endl;
调用了智能指针提供的get()函数就可以显示转换类型。
但是显示转换却显得异常麻烦,所以我们需要隐式转换,这样对于用户而言会更方便一点。
隐式类型转换
为什么建议用隐式类型转换?
class A { public:}; class B { public:A get(){return a;} private:A a; };
以上是显示类型转换函数,没有问题,但是麻烦的是每次都得调用get,显得不方便,所以建议使用隐式类型转换:
class A { public:A(int x):a1(x){} private:int a1; }; class B { public:B(const A a):a2(a){}operator A() const{return a2;} private:A a2; }; int main() {A a(1);B b(a);A aa = b; }