您好,登錄后才能下訂單哦!
使用new初始化對(duì)象中的指針成員時(shí)遇到的問(wèn)題
在構(gòu)造函數(shù)中使用new初始化指針成員,那么析構(gòu)函數(shù)中就必須使delete,并且new對(duì)應(yīng)delete, new[]則對(duì)應(yīng)于delete[]。
在有多個(gè)構(gòu)造函數(shù)的情況下,必須以相同的方式使用new,要不用new,要不用new[],因?yàn)橹淮嬖谝粋€(gè)析構(gòu)函數(shù),所有的構(gòu)造函數(shù)都必須與虛構(gòu)函數(shù)相兼容。
PS. 當(dāng)然在構(gòu)造函數(shù)中使用new初始化指針的時(shí)候,可以把指針初始化為空(0/NULL 或者是C++11中的nullptr),因?yàn)閐elete不管有沒(méi)帶[]都與空指針兼容。
需要自行定義一個(gè)復(fù)制構(gòu)造函數(shù)和賦值構(gòu)造函數(shù),用深復(fù)制的方式把一個(gè)對(duì)象初始化給另一個(gè)對(duì)象,一個(gè)對(duì)象復(fù)制給另一個(gè)對(duì)象,如下:
復(fù)制構(gòu)造函數(shù):
String:String(const String & st) { num_Strings++; len = st.len; str = new char[len+1]; std::strcpy(str,st.str); }
賦值構(gòu)造函數(shù):
String & String:operator=(const String & st) { if(this == &st) return *this; else delete [] str; len = st.len; str = new char[len+1]; std::strcpy(str,st.str); return *this; }
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持億速云!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。