#include <iostream>
#include <memory>
int main () {
// foo bar p
// --- --- ---
std::unique_ptr<int> foo; // null
std::unique_ptr<int> bar; // null null
int* p = nullptr; // null null null
foo = std::unique_ptr<int>(new int(10)); // (10) null null
bar = std::move(foo); // null (10) null
p = bar.get(); // null (10) (10)
*p = 20; // null (20) (20)
p = nullptr; // null (20) null
foo = std::unique_ptr<int>(new int(30)); // (30) (20) null
p = foo.release(); // null (20) (30)
*p = 40; // null (20) (40)
return 0;
}
自己实现的unique_ptr:
#include <iostream>
using namespace std;
template<typename T>
class munique_ptr{
T *ptr;
public:
munique_ptr(T *_ptr=NULL):ptr(_ptr){}
~munique_ptr()
{
delete ptr;
}
//删除拷贝构造函数
munique_ptr(const munique_ptr &r)=delete;
//删除赋值运算符重载函数
munique_ptr &operator=(const munique_ptr &r)=delete;
T operator*()
{
return *ptr;
}
};
int main(void)
{
munique_ptr<double> ptr(new double(3.14));
cout<<*ptr<<endl;
munique_ptr<double> ptr1=ptr;
munique_ptr<double> ptr2;
ptr2=ptr;
}