非常幸運的進入了華為公司,開始了我的職業生涯。今天開啟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開發工具它的 博大精深 值得我們慢慢學習與積累,先看看下面我查詢的資料吧 一 拷貝建構函式 拷貝建構函式,是一種特殊的建構函式,它由編譯器呼...