2014年11月2日 星期日

對類別(class)或結構(struct)做指定運算的風險(C/C++)

目前的C語言和C++都允許對structclass做指定運算,不過如果隨便指定是會有風險的。舉個簡單的例子:
看到這裡,相信大家都發現問題所在了。因為在指定運算時,只是把p.i的位址複製一份丟給q.i,所以當p.i的位址被釋放之後,q.i也同樣不能再用了。
解決的做法,就是對等號進行重載(overloading),不過這只對C++管用,若是在C語言上,就只能記得每次複製前,先配置好空間了。
另外在Design Pattern中,有個Prototype Pattern,就是專門處理這種類別複製的模式,是種相當管用的做法,只是這也僅限於物件導向程式語言的情況。

沒有留言:

張貼留言