独享指针unique_简单实现
#include <iostream>
#include <memory>
using namespace std;
template <class T>
class UniquePtr
{
public:
UniquePtr(T* ptr = NULL) :key(ptr) {
}
virtual ~UniquePtr() {
decrease();
}
T* get() {
return key;
}
// 赋值,右值引用,转移资源
UniquePtr& operator = (UniquePtr&& ptr) {
key = ptr.key;
ptr.key = NULL;
return *this;
}
private:
T* key;
void decrease() {
if (key != NULL) {
delete key;
}
}
};
class Base
{
public:
Base() {
cout << "函数构造了" << endl;
}
~Base() {
cout << "函数析构了" << endl;
}
};
int main()
{
UniquePtr<Base>p(new Base);
cout << p.get() << endl;
UniquePtr<Base>q;
cout << q.get() << endl;
q = std::move(p);
cout << p.get() << endl;
cout << q.get() << endl;
return 0;
}