Re: [問題] pointer問題

看板C_and_CPP (C/C++)作者時間16年前 (2009/09/14 08:43), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/3 (看更多)
: TYPEA* p1; : TYPEA* p2; : : 想請問版上的有經驗的版友 : : 有沒有比較聰明的寫法 *p2 = *p1; : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.113.190.181 : 推 LPH66:memmove(p2,p1,sizeof(TYPEA)); 這樣? 09/14 00:39 : → helloken:謝謝一樓 我會試試看 09/14 00:44 memmove/memcpy作用在non-trivial class上會炸掉.. 因為vptr會一起被copy過去 *p2 = *p1; 這種寫法的好處在於 你不用管class是不是trivial 根據Inside the C++ object model 一個好的compiler會自動為具有bitwise copy sementic的class進行bitwise copy 也就是不會實際合成一個copy assignment operator function 所以 1、如果你的class是trivial的 *p2 = *p1; 和memmove的意思是一樣的 2、如果你的class是non-trivial 編譯器會自動幫你合成一個default memberwise copy assignment *p2 = *p1 就相當於去呼叫上面這個operator= : → VictorTom:有個問題, 如果TYPEA有pointer又是另外配置空間來的, 單 09/14 01:14 : → VictorTom:純memcpy的行為還是處理不了這個狀況; 事實上個人以為, 09/14 01:15 : → VictorTom:複雜一點的結構特地寫一個copy function反而是好事, 09/14 01:16 另外就是像V板友提到的 不管是memcpy或是*p2 = *p1; 都不會有deep copy語意 這又是另一個問題了.. 如果你需要class有deep copy語意,只能 1.自己寫一個 void copy_from(const T&) 2.overload T& operator=(const T&) 3.在class內改用具有deep copy語意的指標 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.13.219 ※ 編輯: holymars 來自: 114.32.13.219 (09/14 09:03)

09/14 09:57, , 1F
推~~前陣子才學會deep copy這個術語:)
09/14 09:57, 1F

09/14 19:43, , 2F
感謝回應 很有幫助
09/14 19:43, 2F
文章代碼(AID): #1AhP6qeb (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
5
完整討論串 (本文為第 2 之 3 篇):
1
5
1
5
文章代碼(AID): #1AhP6qeb (C_and_CPP)