1.智能指针类分类
auto_ptr(摒弃不建议使用)
unique_ptr
shared_ptr
如图三个指针定义:

2.智能指针作用:
智能指针保证当临时变量被删除后智能指针系统会将所指向的地址也自动被删掉
3.智能指针explicit
所有智能指针类都有一个explicit构造函数,该构造函数将指针作为参数,因此不需要自动将指针转换为智能指针对象

1是将普通指针p_reg复制转换为智能指针(不允许)因为智能指针有explicit,智能显式转换
2将指针p_reg显式转换智能指针(允许)
3是同1
4同2
注:
1.智能指针只能使用new创建的对象,才会自动释放内存的效果
2.当两个智能指针同时指向一个new对象时,是会出问题的,解决方法如下:

4.智能指针注意事项:
程序试图将一个unique_ptr赋值给另一个时,如果源unique_ptr是个临时右值 ,编译器允许这样做,如果源unique_ptr将存在一段时间,编译器将不允许这样做如下图1不允许,2允许,3不允许,4允许:


但可以使用std::move()交出所有权,如下图


注:
auto_ptr只能和new一起使用不能和new[]使用,unique_ptr 可以和new[]使用

5.智能指针使用选择
如果程序要使用多个指向同一个对象的指针,选择shared_ptr;
如果程序不需要多个指向同一个对象的指针,则可使用unique_ptr;
网友评论