有一則關於深拷貝和淺拷貝的例子。

 

 

單單看上面的主函數,猜測一下,IntMatrix類實例m會有所變化嗎?

你可能會說,老大,別鬧了,就算你不給出fun函數,我也知道你是在搞值傳遞,不會有變化的。

嘿嘿,是啊,我不但給出了fun函數,甚至只是把它作爲一個空函數。

 

最終結果爲-572662307,喫驚吧。

 

現在給出IntMatrix類代碼:

主要看析構函數你就會發現:

 

在想fun函數傳遞參數時,即把m進行復制了一遍,但糟糕的是,只是淺複製,所以在fun結束時,條用m的析構時,把內部成員指針data指向的空間給摧毀了!

 

Tip:

 

在把類當做值參時,要當心淺拷貝有可能帶來的一系列問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章