推 azureblaze:所以說最好還是兩邊分開囉? 感謝 02/11 18:08
※ 引述《azureblaze (AzureBlaze)》之銘言:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 61.219.157.175
: 推 littleshan:不行 02/11 15:06
:
: 測試過後發現在vc2008下這樣做是ok的
: 成員的記憶體是連續的所以直接抄過去再修正就好了
如果你能保證所有的成員都是 POD
那 memcpy 是可以沒錯
但重點就在這句「保證所有的成員都是 POD」
如果成員有 struct 你也必須要保證該 struct 的所有成員也都是 POD
但這件事不只困難、造成實作上的不方便
還有兩件很糟的事
1. 若某個不知情的人在另一個 struct 塞入了 non-POD,比如說 string
這件事可能會、也可能不會讓你的程式當掉
2. 你很難找到錯誤所在
你必須遞迴地對所有的成員的內容做檢查
這種「可能會也可能不會」的 bug 說有多討厭就有多討厭
為什麼不在一開始就降低它出現的機率?
: 不過有沒有比較好的方法?
: 像是在assignment operator中有沒有辦法先呼叫default assignment operator
: 查的過程中每個人都會說不要memcpy class
: 但是一個一個設很麻煩,還可能忘記改copy constructor之類的
不要寫 assignment operator
這樣 C++ 會直接對每個成員呼叫它的 assignment operator
至於 pointer...你可以考慮把這些 pointer 集中放到一個 class 下
然後針對這個 class 寫 assignment operator 即可
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163