头文件
智能指针模板关键字:
- auto_ptr
- unique_ptr
- shared_ptr
智能指针模板语法
auto_ptr<double> pd(new double);
unique_ptr<double> pd(new double);
shared_ptr<double> pd(new double);
auto_ptr<double> pd;
unique_ptr<double> pd;
shared_ptr<double> pd;
- 定义赋值运算符,使之执行深复制。这样两个指针将指向不同的对象,其中的一个对象是另一个对象的副本。
- 建立所有权概念,对于特定的对象,只能有一个智能指针可拥有它,这样只有拥有对象的智能指针的构造函数会删除该对象。然后,让赋值操作转让所有权。这就是用于auto_ptr和unique_ptr的策略,但unique_ptr的策略更严格。
- 创建智能更高的指针,跟踪引用特定对象的智能指针数。这称为引用计数。
例如:赋值时,计数将加1,而指针过期时,计数将减1.仅当最后一个指针过期时,才调用delete。这是share_ptr采用的做法。
共性与应用区别
共性
区别
- 多个auto_ptr允许指向同一个对象,但是会导致比如说,两个auto_ptr指向同一个对象,当其中一个auto_ptr析构,释放内存之后,下一个auto_ptr此刻就是null,再进行访问则会出错。
- unique_ptr可以在编译阶段就报多个指针指向同一个对象的错误。
- shared_ptr记录指向同一个对象的指针,仅当所有指针都释放,才会最终释放该对象内存。