- 在构造对象的时候获取资源, 在析构的时候释放资源
- 对象a拷贝对象b的时候, a释放自己的资源, 获取b的资源
- b把自己指向资源的指针赋空,会导致b对象悬空的问题
- 重载* ->
- 一个资源只能由一个对象管理
#include <iostream>
#include <mutex>
using namespace std;
template <class T>
class autoPtr{
public:
autoPtr(T* ptr = nullptr)
:_ptr(ptr){
;
}
autoPtr(autoPtr<T>& ap)
:_ptr(ap._ptr){
ap._ptr = nullptr;
}
autoPtr<T>& operator=(autoPtr<T>& ap){
if (this != &ap){
if (_ptr){
delete _ptr;
}
_ptr = ap._ptr;
ap._ptr = nullptr;
}
return *this;
}
T& operator*(){
return *_ptr;
}
T* operator->(){
return _ptr;
}
~autoPtr(){
if (_ptr != nullptr){
delete _ptr;
_ptr = nullptr;
}
}
private:
T* _ptr;
};
int main(){
autoPtr<int> p = new int(1);
autoPtr<int> p1 = p;
*p;
return 0;
}