管理指针成员
大多数C++采用以下三种方法之一来管理指针成员:
(1) 指针成员采取常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。
(2) 类可以实现所谓的“智能指针”行为。指针所指向的对象是共享的,但类能够防止悬垂指针。
(3) 类采取值型行为。指针所指向的对象是唯一的。由每个类对象独立管理。
定义智能指针(smart pointer)类:
智能指针除了增加功能外,其行为像普通指针一样。
1. 引入使用计数
定义智能指针的通用技术是采用一使用计数(use count)。智能指针类将一个计数器与类指向的对象关联。使用计数跟踪该类有多少个对象共享同一指针。使用计数为0时,删除对象。使用计数有时也称为引用计数(reference count)。
每次创建的新对象时,初始化指针并将使用计数置为1。当对象作为另一对象的副本而创建时,复制构造函数复制指针并增加与之相应的使用计数的值。对一个对象进行赋值时,赋值操作符减少左操作数所指对象的使用计数的值(如果使用计数减少至0,则删除对象).,并增加右操作数所指向对象的使用计数的值。最后,调用析构函数时,析构函数减少使用计数的值,如果计数减少至0,则删除基础对象。
2. 定义值型类
处理指针成员的另一个完全不同的方法,是个指针成员提供值语义(value semantics)。具有值语义的类所定义的对象,其行为很像算术类型的对象:复制值型对象时,会得到一个不同的新副本。对副本所做的改变不会反映在原有对象上,反之亦然。
posted on 2008-05-27 10:48
Macaulish 阅读(1672)
评论(1) 编辑 收藏 引用