關於拷貝建構函式 字串拷貝的問題

2021-04-13 23:33:20 字數 1381 閱讀 9570

非常幸運的進入了華為公司,開始了我的職業生涯。今天開啟csdn發現以前複習面試筆試的時候有道題還沒有搞清楚,現在仔細研究了一下,貼出來我的心得,讓大家看看希望對大家有所幫助。

**如下:

#include   

<

string

.h >

#include   

<

stdio.h 

>

class

test    

test(test   

&t) 

//2、這是乙個錯誤的拷貝建構函式,只是淺拷貝,即只把位址拷貝至另外乙個物件。當源物件被析構時,所含有的name指標也被銷毀。但此時目的物件仍然保留了

name指標,這就是乙個dirty pointer,即指向了已被銷毀的記憶體位址,當然要造成錯誤。 ~

test() 

void

print(test   test) 

//3、本程式最大的錯誤,我也是看了大家的提示才知道的。這裡在傳入乙個test型別的物件之後,呼叫完畢時,將會把這個作為引數傳入的test物件的name

指標進行銷毀。而在程式結束時,將會呼叫析構函式執行delete name;這條語句銷毀name指標,造成重複銷毀,造成錯誤。

}; void

main() 

上面的三個問題都是經常遇到的。修改正確後的**如下:

#include  

<

string

.h >

#include  

<

stdio.h 

>

class

test 

test(

char

*newname)  //

有記憶體的操作,要自定義拷貝建構函式和賦值建構函式,否則容易產生一些錯誤

test(

const

test

&t)  

test

&operator=(

const

test&t)

if(name 

!=null)

name 

=new

char

[strlen(t.name)+1

]; strcpy(name, t.name);  }~

test() 

void

print() 

//成員函式,還傳遞物件做引數?

}; void

main() 

注意:1、strlen(char*)函式返回字串的字元個數,不包括終止符

2、strcpy(char*, char*)函式會自動為目的字串新增終止符

3、對於第三個問題的描述,感覺不是很清晰,如果有錯誤的話,希望大家告訴我。 

字串拷貝函式

1.strcpy函式 顧名思義字串複製函式 一般函式原型實現方式 該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意 因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束...

字串拷貝和記憶體拷貝函式

strcpy 拷貝字串 定義函式 char strcpy char dest,const char src strcpy 函式只能拷貝字串。strcpy 函式將源字串src的每個位元組拷貝到目的字串dest中,src字串末尾的 0 也被拷貝過去。strcpy 函式返回引數dest的起始位址。如果引數...

關於拷貝建構函式

首先不要使用vc編譯器來測試,看看這段 並猜想它會呼叫幾次建構函式和析構函式,最後再測試一下 在vc編譯執行後結果大失所望吧?不明白不要緊,vc這個整合的ide開發工具它的 博大精深 值得我們慢慢學習與積累,先看看下面我查詢的資料吧 一 拷貝建構函式 拷貝建構函式,是一種特殊的建構函式,它由編譯器呼...