POCO::Foundation 内存管理(一) AutoPtr
引用计数:
1.无论何时一个引用被销毁或重写,它所引用的对象的引用计数减少。
2.无论何时一个引用被创建或拷贝,它所引用的对象的引用计数增加。
3.初始时的引用计数是1。
4.当一个对象的引用计数为0时,这个对象资源被销毁。
5.在多线程环境下,增加和减少操作必须是原子的操作。
对象拥有权:
1.如果某人拥有一个对象的拥有权,那么他有责任在对象不需要的时候删除这个对象。
2.如果对象的拥有者销毁资源失败,那么就会导致一个内存漏失。
3.其他人也可以指向这个对象,但是,他们绝不销毁这个对象。
4.拥有权是可以转移的,但是,在任何一个给定的时刻,仅有一个拥有者。
二者关系:
1.一个拥有有引用计数性质的对象的指针不将增加这个引用的引用计数。
2.这说明没有先前的拥有者,换句话说,这个对象刚刚被创建。
3.或者先前的拥有者放弃了拥有权,因此他也不减少所持有对象的引用计数。
4.通常,第一个在对象创建后被对象赋值的指针拥有拥有权,其他的则不。
AutoPtr类模板:
1.Poco::AutoPtr实现了一个引用计数的智能指针。
2.Poco::AutoPtr可以被任何支持引用计数特性的类实例化。
3.一个支持引用计数的类必须含有下列特性:
1.维持一个引用计数,初始的时候为1.
2.实现一个方法void duplicate()用来增加引用计数。
3.实现一个方法void release()用来减少引用计数,当引用计数为0时,销毁资源。
AutoPtr构造和赋值:
1.当从一个C*构造AutoPtr<C>,AutoPtr拥有C的拥有权,引用计数不变。
2.当赋值一个C*到AutoPtr<C>,AutoPtr拥有C的拥有权,引用计数不变。
3.当从另外一个AutoPtr<C>构造AutoPtr<C>,这两个AutoPtr共享C的拥有权,引用计数增加。
4.当赋值另一个AutoPtr<C>到AutoPtr<C>,这两个AutoPtr共享C的拥有权,引用计数增加。
这就是AutoPtr的一些基本性质,不妥之处,还望指出。
谢谢观赏!
