管理指針成員
大多數C++采用以下三種方法之一來管理指針成員:
(1) 指針成員采取常規指針型行為。這樣的類具有指針的所有缺陷但無需特殊的復制控制。
(2) 類可以實現所謂的“智能指針”行為。指針所指向的對象是共享的,但類能夠防止懸垂指針。
(3) 類采取值型行為。指針所指向的對象是唯一的。由每個類對象獨立管理。
定義智能指針(smart pointer)類:
智能指針除了增加功能外,其行為像普通指針一樣。
1. 引入使用計數
定義智能指針的通用技術是采用一使用計數(use count)。智能指針類將一個計數器與類指向的對象關聯。使用計數跟蹤該類有多少個對象共享同一指針。使用計數為0時,刪除對象。使用計數有時也稱為引用計數(reference count)。
每次創建的新對象時,初始化指針并將使用計數置為1。當對象作為另一對象的副本而創建時,復制構造函數復制指針并增加與之相應的使用計數的值。對一個對象進行賦值時,賦值操作符減少左操作數所指對象的使用計數的值(如果使用計數減少至0,則刪除對象).,并增加右操作數所指向對象的使用計數的值。最后,調用析構函數時,析構函數減少使用計數的值,如果計數減少至0,則刪除基礎對象。
2. 定義值型類
處理指針成員的另一個完全不同的方法,是個指針成員提供值語義(value semantics)。具有值語義的類所定義的對象,其行為很像算術類型的對象:復制值型對象時,會得到一個不同的新副本。對副本所做的改變不會反映在原有對象上,反之亦然。