Shallow Copy
C++內可以產生class,可以從規範產生出物件,物件就有class內各個欄位的物件。
Class
1.public/private
若為public,則外面可以動用,若沒有設則全為private
2.名稱
3.定義兩個函數,constructor與destructor
建立一個物件,要怎麼產生、要怎麼消滅。
constructor與destructor名稱與class名稱一樣,裡面會宣告函式,而destructor則要在函數名稱前加上'~'
物件的好處:
可以產生、可以Copy、可以assignment。
1.Copy
若直接使用LibraryName a=b,會產生問題
問題一:Share memory
因為是直接拷貝,不會重新allocate memory,直接把pointer指向同個地方
問題二:Double deletion
因為指向同個變數,若呼叫則destructor會砍兩遍次
2.Assignment
若使用Library c; c = a,會產生三個問題
問題一:Share memory
問題二:Memory Leak
因為在c = a時,會把原先在c內的pointer給覆蓋掉,而永遠找不到了
問題三:Double deletion
--> 解決方法:
如果一個class有allocate memory如new,則需要重新定義新的copy constructor與assignment operator
特別注意:String不會覆蓋,因為copy會產生新的(而在C中,是pointer,若變數同會指向同個地方)
Q&A
1.Copy constructor
LibraryName a=b
2.Assignment operator
LibraryName a
c = a
3.Struct與Class的差別