先介绍下二叉搜索树
1.所有非叶子结点至多拥有两个儿子(Left和Right);
2.所有结点存储一个关键字;
3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
如:
首先,不要将auto_ptr对象作为STL容器的元素
因为容器要求复制或者赋值后,两个对象保存相同的值
两个auto_ptr不能指向同一个对象
auto_ptr的另一个缺陷是将数组作为auto_ptr的参数: auto_ptr<char> pstr (new char[12] ); //数组;为定义
然后释放资源的时候不知道到底是利用delete pstr,还是 delete[] pstr;
当一个auto_ptr对象被用于另一个对象初始化或赋值时,左边对象获取所有权,右边对象不在拥有所有权。
Auto_prt<int> p1(new int(1024));
Auto_ptr<int> p2(new int(2048));
P1 = p2;
P1在赋值前释放当前指向对象的所有权,赋值后p1拥有新对象所有权,对象为2048,p2不再拥有所有权
不能通过赋值操作来初始化auto_ptr
std::auto_ptr<int> p(new int(42)); //OK
std::auto_ptr<int> p = new int(42); //ERROR
这是因为auto_ptr 的构造函数被定义为了explicit
1. shared_ptr是Boost库所提供的一个智能指针的实现,shared_ptr就是为了解决auto_ptr在对象所有权上的局限性(auto_ptr是独占的),在使用引用计数的机制上提供了可以共享所有权的智能指针.
2. shared_ptr比auto_ptr更安全
3. shared_ptr是可以拷贝和赋值的,拷贝行为也是等价的,并且可以被比较,这意味这它可被放入标准库的一般容器(vector,list)和关联容器中(map)。