看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
azureblaze:所以說最好還是兩邊分開囉? 感謝 02/11 18:08