#include <iostream>
#include <vector>
#include <memory>
#include <assert.h>
using namespace std;
class A {
public:
void do_something();
};
// 智能指针有一个通用的规则,就是`->`表示用于调用指针原有的方法,而`.`则表示调用智能指针本身的方法.
// 对于unique_ptr有下面几种本身方法
// get 获取智能指针保存的原生指针
// bool 判断该智能指针是否拥有指针
// release 释放所管理指针的所有权,返回原生指针,但是不销毁原生指针
// reset 释放并销毁原生指针。如果参数为一个新指针,将管理这个新指针
int main() {
std::unique_ptr<A> a(new A());
A* origin_a = a.get();
if (a) {
printf("a仍然拥有指针");
}
std::unique_ptr<A> a2(a.release()); // 转移拥有权
a2.reset(new A()); // 释放并销毁原有对象,持有一个新对象
a2.reset(); // 释放并销毁原有对象,等同于 a2 == nullptr
assert(a2 == nullptr);
return 0;
}