1. 程式人生 > >C++:memcpy和for迴圈,在進行拷貝(複製)時的區別?

C++:memcpy和for迴圈,在進行拷貝(複製)時的區別?

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)