介绍
在使用智能指针之前,一般都是用new和delete来进行内存的管理,但是一旦忘记delete,这样容易造成内存泄露。从而导致智能指针的出现,它只需要你创建,之后就不需要你管,也不需要你手动释放,到该释放的地方,它会自动释放。
- 原理:其实智能智能是一个模板类,内部有指向模板的一个指针,释放使用析构函数进行,所以这是自动的过程。定义在<memory> 命名空间 std
四种智能指针
std::auto_ptr(已经被C++11弃用)
使用的时候会给警告:is deprecated
- 注意:不建议使用,但是如果使用,记住它是独占式,将p2 = p1 ,那么p1 则是nullptr,如果再通过p1去操作,程序会直接崩溃
std::unique_ptr
- 介绍:正如名字一样,它也是独占式的指针,尝试将它复制给其他指针会编译报错,但是可以通过std::move()进行操作,操作之后原先的指针也不能用,这也解释了unique的含义。
std::unique_ptr<Person> p1(new Person(1));
int id = p1->GetId();
// std::unique_ptr<Person> p2 = p1; 报错
std::unique_ptr<Person> p2 = std::move(p1);
id = p2