單單看上面的主函數,猜測一下,IntMatrix類實例m會有所變化嗎?
你可能會說,老大,別鬧了,就算你不給出fun函數,我也知道你是在搞值傳遞,不會有變化的。
嘿嘿,是啊,我不但給出了fun函數,甚至只是把它作爲一個空函數。
最終結果爲-572662307,喫驚吧。
現在給出IntMatrix類代碼:
主要看析構函數你就會發現:
在想fun函數傳遞參數時,即把m進行復制了一遍,但糟糕的是,只是淺複製,所以在fun結束時,條用m的析構時,把內部成員指針data指向的空間給摧毀了!
Tip:
在把類當做值參時,要當心淺拷貝有可能帶來的一系列問題。