1. 智能指针
scoped_ptr
只在作用域内生效,离开作用域既释放资源,不能复制和赋值。类似于标准库的auto_ptr,但它相对于auto_ptr的优势在于,他的要求更严格,使用起来更安全。auto_ptr拥有转移语义,当使用了赋值和复制操作时可能操作未定义行为。
scoped_array
scoped_array的数组形式,区别在于他管理的对象是用new []分配,同时释放时用delete[],能正确的释放数组对象。不能用*和->操作符,支持[]操作符方式解引用。scoped_array不推荐使用,因为使用麻烦,可以用vector代替。
shared_ptr
shared_ptr是一个引用计数型智能指针,当计数为0时自动释放管理的资源。支持*和->指针操作行为,提供隐式bool类型转换用于指针有效性判断。通过get()方法可以获取原始指针。
shared_ptr有两个专门的函数来检查引用计数。unique()指示该指针是否是对象的唯一管理者。use_count()指示对象正在由多少智能
指针引用。
shared_ptr支持比较运算,基于内部保持的指针实现。