一、初始化
std::unique_ptr<int> p1(new int(12));
std::unique_ptr<string> p1(new string(""));
二、指针转移
std::unique_ptr<int> p1(new int(12));
std::cout << &(*p1) << std::endl;
//std::cout << p1 << std::endl;无法这样直接打印
std::unique_ptr<int> p2(p1.release());
std::cout << &(*p2) << std::endl;
std::cout << &(*p1) << std::endl;
通过 release()函数 对象的指针转移,原来的指针置空
常和reset结合使用
std::unique_ptr<int> p1(new int(12));
std::cout << &(*p1) << std::endl;
std::unique_ptr<int> p3(new int(45));
std::cout << &(*p3) << std::endl;
p1.reset(p3.release());
std::cout << &(*p1) << std::endl;
std::cout << &(*p3) << std::endl;
auto p = p1.release();//切记delete(p) 进行释放p
//p 是一个int * 类型,常用来初始化 unique_ptr
结果可以看出:p1.reset(p3.release());之后,p1指向了原来p3的内存空间,p3被置空