自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++對象復制相關(guān)應(yīng)用方式淺析

開發(fā) 后端
C++對象復制在實際代碼編寫中占據(jù)著非常重要的地位。我們今天將會通過對這篇文章的解讀為大家詳細介紹一下相關(guān)內(nèi)容。

C++編程語言的應(yīng)用范圍非常廣泛,而且功能很強大,它能夠支持很多程序設(shè)計風格。其中就包括對面向?qū)ο蟮闹С帧T谶@里我們將會為大家詳細介紹一下有關(guān)C++對象復制的應(yīng)用方式,以幫助大家學習。

C++對象復制代碼示例:

  1. class Table{  
  2. Name * p;  
  3. size_t sz;  
  4. publish:  
  5. Table(size_t s = 15){p = new Name[ssz=s];}  
  6. ~Table(){delete[]p ;}  
  7. ......  
  8. }  
  9. void h()  
  10. {  
  11. Table t1;  
  12. Table t2 = t1;  
  13. Table t3;  
  14. t3 = t2;  

在h()結(jié)束時,默認構(gòu)造函數(shù)調(diào)用了2次,而析構(gòu)函數(shù)被調(diào)用了3次,為何?#t#

Table t1; 調(diào)用1次默認構(gòu)造函數(shù)

Table t2 = t1;默認的對象的賦值操作,按成員賦值,其中關(guān)于指針p,僅僅是將t1.p賦值給t2.p,即t2.p = t1.p,并無內(nèi)存分配。對象t1和t2的p指針均指向同一塊內(nèi)存。

Table t3; 調(diào)用1次默認構(gòu)造函數(shù)

t3 = t2; 原t3.p指針被t2.p覆蓋,此時t3.p同樣指向?qū)ο髏1和t2的p指針的同一塊內(nèi)存。注意:t3原分配給p的內(nèi)存由于沒有指針指向,無法利用,造成存儲浪費。

h()結(jié)束,對象t1,t2,t3的析構(gòu)函數(shù)調(diào)用,此時對t1,t2,t3的指針p所指的同一塊存儲進行了三次刪除,非常危險,導致的結(jié)果是無發(fā)預料的,很可能災難性的。

 

因此明確定義類的復制構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù))和賦值預算可避免這樣的錯誤。

 

代碼

  1. Table::Table (const Table &t)  
  2. {  
  3. p = new Name[sz=t.sz];  
  4. for(int i=0;i<sz;i++) p[i]=t.p[i];  
  5. }  
  6. Table & Table::operator=(const Table &t)  
  7. {  
  8. if(this!=&t){  
  9. delete []p;  
  10. p = new Name[sz=t.sz];  
  11. for(int i=0;i<sz;i++) p[i]=t.p[i];  
  12. }  
  13. return *this;  

C++對象復制的基本概念就為大家介紹到這里。

責任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-06 17:39:52

C++ strtok

2010-01-25 14:18:46

C++對象模型

2010-01-14 14:17:20

Visual C++

2010-02-03 14:30:04

C++棧對象

2010-02-05 16:46:58

C++ TinyXml

2010-02-02 17:39:31

C++構(gòu)造函數(shù)

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2009-08-25 15:15:08

C#對象序列化應(yīng)用

2010-01-22 13:59:34

Visual C++應(yīng)

2010-02-03 10:11:17

C++動態(tài)數(shù)組

2010-02-06 16:21:35

C++常規(guī)DLL

2010-02-04 13:39:44

C++數(shù)組參數(shù)

2010-02-04 14:29:45

C++ typenam

2010-02-06 16:39:45

C++ assert(

2010-02-03 15:27:26

C++ static

2010-01-20 10:19:55

C++數(shù)組

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2010-02-05 13:44:06

C++ eof()函數(shù)

2010-02-01 17:31:06

C++類成員
點贊
收藏

51CTO技術(shù)棧公眾號