将一个类设计成像一个指针, 可以给传统的指针增加一些额外的功能.
指针支持的操作符, 这个类应该都支持
关于智能指针
- 箭头符号作用在左值后, 仍然会作用在新的返回值上
- *sp => *my_ptr<Foo>::px
- sp-> => my_ptr<Foo>::px->
template<class T>
class my_ptr {
public:
my_ptr(T* p) : px(p) {}
T& operator*() const {
return *px;
}
T* operator->() const {
return px;
}
private:
T* px;
};
struct Foo {
void fun() {
cout<<"Foo"<<endl;
}
};
int main() {
my_ptr<Foo> sp(new Foo);
sp->fun();
(*sp).fun();
return 0;
}