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