Re: [問題] copy constructor的問題
※ 引述《tstanly ()》之銘言:
: 有點搞不太懂copy construtor的用途
: 我知道的大概是
: 物件傳給函數時 會複製一個物件
: 而有可能因為改變此復製物件(ex:delete)時 而改變了原本物件
: 應該是降對吧...?
主要是為了防止非預期的 shallow copy
實現正確的copy語意
預知詳情請google
: 以下是一個範例
: 上面程式碼沒有使用copy constructor
: 而下面程式碼有
: 不懂的是為什麼第一個程式碼印出
: 1 2
: 0 4072544
: 而加了copy constructor可以解決此問題
因為你著了 shallow copy 的道
: int getval(myclass o)
: {
: return *o.p;
: }
注意這裡是 call by value
會呼叫 copy ctor
: int main(int argc, char *argv[])
: {
: myclass a(1),b(2);
: cout<<getval(a)<<" "<<getval(b);
這裡b傳進getval建立了一個複本,假設叫bb
預設複製行為是bb.p = b.p
return之後bb被回收,發動dtor
bb.p被delete,同時意味著b.p指向的空間被delete
: cout<<"\n";
: cout<<getval(a)<<" "<<getval(b);
所以這裡的getval會拿到爛掉的指標
: system("pause");
: return 0;
: }
: output:
: 1 2
: 0 4072544
: //copy construtor
: myclass::myclass(const myclass &o)
: {
: p=new int;
: if(!p){
: cout<<"allocation error\n";
: exit(1);
: }
: *p=*o.p;
: }
注意這裡要做證同測試
另外operator =也要同時overload
否則還是有機會出錯
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.21.174
※ 編輯: legnaleurc 來自: 59.127.21.174 (03/16 23:00)
推
03/16 23:05, , 1F
03/16 23:05, 1F
→
03/16 23:16, , 2F
03/16 23:16, 2F
推
03/16 23:29, , 3F
03/16 23:29, 3F
推
03/16 23:31, , 4F
03/16 23:31, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章