C++:memcpy和for迴圈,在進行拷貝(複製)時的區別?
阿新 • • 發佈:2019-01-31
1.memcpy複製原理
memcpy複製時,是原模原樣的進行復制,即就是memcpy複製是淺拷貝,複製的機制就是兩個指標指向同一空間,所以在拷貝有些型別時,會崩潰
2.memcpy在進行有些型別的拷貝時,為什麼會崩潰?
因為memcpy是淺拷貝,會引起同一塊空間被多個物件使用,那就有可能會導致同一塊空間被釋放多次,所以程式就會崩潰
3.使用memcpy時,那些型別會崩潰?
管理資源的型別會崩潰,例如int沒有管理資源,所以int就不會崩潰,而string管理資源了,string在使用memcpy進行拷貝時,會崩潰(string類管理資源了,那管理資源的話,再使用memcpy可能就會出現多個指標管理同一份資源,所以就會崩潰,而int型別沒有管理資源,就算使用memcpy也不會出錯,因為沒有資源,故不會出現,多個指標管理同一份資源)
4.在進行拷貝時,memcpy和for迴圈的優缺點:
5.內建型別和自定義型別應該使用哪種方式進行拷貝?
綜上
所以,在進行拷貝時,為了避免出錯:
如果是內建型別,使用memcpy(因為memcpy的效率高)
如果是自定義型別,使用for迴圈(for安全,而且自定義型別會涉及到深淺拷貝,故直接使用for)