C++類設計思考(二):值語義與引用語義

來源:互聯網
上載者:User

類設計前首先需要確定的是,該類所執行個體化的對象是值語義還是引用語義。值語義
一般用於非獨佔性資來源物件,
表示該對象可以像int
一樣的工作,可以任意的拷貝和重新賦值,而不會引起資源泄漏或者切割(指部分資源釋放而部分泄漏)。引用語義一般用於獨佔性資源封裝

對象
,表示該對象不允許拷貝和重新賦值。從文法的角度上來說,
以下代碼對值語 義是有效,而對引用語義是無效的
:

CMyObject a,c;

CMyObject b(a); 
  
       
//值語義有效,引用語義無效

c = a;                            //值語義有效,引用語義無效

注意:假如以上語句有效並成功執行,但在執行代碼後
,a對象狀態發生了變化,則該對象類文法上表現為值語義,而本質上還是引用語義。如
std::autoptr
。

引用語義與
值語義應用的
基本規則如下
:

1、盡量使對象實現值語義而不是引用語義。引用語意物件不能使用在
stl
容器中。

2、

對系統
獨佔性
資源封裝的類
可以使用
引用語義。如印表機封裝類,螢幕案頭類等。

3、通過聲明而不定義拷貝建構函式和賦值操作符,顯示的定義引用語義。

4、通過引用計數技術,可以使得原本是引用語義的對象實現為值語意物件。

5、基類對象應該禁止值語義,但提供
Clone
方法,進行對象複製。

 

引用語義文法實現如下:

class CMyObject

{

public:

typedef  CMyObjectmy_type;

...

public:

//拷貝建構函式
(
聲明而不定義,禁止值語義
)

CMyObject(const my_type& rhs);

//賦值操作符重載
(
聲明而不定義,禁止值語義
)

my_type& operator=(const my_type& rhs);

....

};


值語義文法實現如下:

class CMyObject

{

public:

typedef  CMyObject







my_type;

...

public:

//拷貝建構函式

CMyObject(const my_type& rhs) {...}

//賦值操作符重載
(
聲明而不定義,禁止值語義
)

my_type& operator=(const my_type& rhs)

{

my_type aTemp(rha);

Swap(aTemp);

}

void Swap(my_type& rhs){...}

....

};

 

胡樂秋

2010/8/3  於長沙

http://blog.csdn.net/hlqyq

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.