c++拷貝構(gòu)造函數(shù) 有自己定義拷貝構(gòu)造函數(shù)的必要嗎?
有自己定義拷貝構(gòu)造函數(shù)的必要嗎?1確實(shí)提供了一個(gè)復(fù)制構(gòu)造函數(shù),但此函數(shù)嚴(yán)格按位復(fù)制。一旦類中有動(dòng)態(tài)分配成員,這將是一個(gè)問題(通常稱為深度復(fù)制),這是不正確的2如果沒有動(dòng)態(tài)分配成員,這是不必要的。但是有
有自己定義拷貝構(gòu)造函數(shù)的必要嗎?
1確實(shí)提供了一個(gè)復(fù)制構(gòu)造函數(shù),但此函數(shù)嚴(yán)格按位復(fù)制。一旦類中有動(dòng)態(tài)分配成員,這將是一個(gè)問題(通常稱為深度復(fù)制),這是不正確的
2如果沒有動(dòng)態(tài)分配成員,這是不必要的。但是有動(dòng)態(tài)分配成員是必要的,也需要完成賦值運(yùn)算符和析構(gòu)函數(shù)的重載,這樣當(dāng)有動(dòng)態(tài)分配成員時(shí)就不會(huì)有內(nèi)存泄漏
析構(gòu)函數(shù)的自動(dòng)調(diào)用(2)堆中的對(duì)象不會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。析構(gòu)函數(shù)調(diào)用delete后,它會(huì)主動(dòng)調(diào)用析構(gòu)函數(shù)
復(fù)制構(gòu)造函數(shù)用于在未生成對(duì)象時(shí)構(gòu)造另一個(gè)對(duì)象。
=賦值運(yùn)算符重載用于在對(duì)象已存在時(shí)使用另一個(gè)對(duì)象構(gòu)造對(duì)象。有必要判斷它不是通過給自身賦值來構(gòu)造的。同時(shí)判斷部分構(gòu)件不需要重新構(gòu)造。