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