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