#include<iostream>
using namespace std;
class test {
public:
test() {
cout << "调用构造函数" << endl;
}
~test() {
cout << "调用析构函数" << endl;
}
};
int main(void) {
//1.构造函数
unique_ptr<test>t1;
unique_ptr<test>t2(new test());
unique_ptr<test[]>arr_t(new test[5]);
unique_ptr<test[]>arr_t2;
//2.赋值一定要使用移动语义
t1 = move(t2);//move : 把左值转化为右值
arr_t2 = move(arr_t2);
unique_ptr<test[]>arr_t3;
test* arr_t4 = new test[6];
arr_t3.reset(arr_t4);
//3.主动释放对象
unique_ptr<test>t3(new test());
t3 = NULL;
//或 t3=nullptr;
//或 t3.reset();
//4.release 智能指针脱管,由普通指针接管,需要手动释放内存
unique_ptr<test>t4(new test());
test* temp;
temp=t4.release();
delete temp;
//5.其他用法与auto_ptr 一致
return 0;
}