[C++学习] effective c++ 笔记 pass by value ,pass by reference
在編寫函數(shù)的返回值和形參的時(shí)候,能 傳引用(pass by reference) 就不要 傳值 (pass by value).
這樣是為了少調(diào)用 copy constructor ,可以提高效率。
另外 傳遞& 引用,可以像用指針一樣,能實(shí)現(xiàn) “父類指針指向子類實(shí)例”的多態(tài)效果,傳值沒有多態(tài)的效果。
比如有類
函數(shù) returnStudentTwo() 比 returnStudentOne() 效率高, 因?yàn)橐眯螀?&s 不必再調(diào)用拷貝構(gòu)造函數(shù)來構(gòu)造新的對象,只是另1個(gè)對象的別名。 Student returnStudentOne(Student s) {return s; }Student returnStudentTwo(const Student& s) {return s; }const Student& returnStudentThree(const Student& s) {return s; }
返回值也同理, returnStudentThree() 比 returnStudentTwo() 效率更高,因?yàn)橐眯问降姆祷刂狄膊恍枰{(diào)用拷貝構(gòu)造函數(shù)。
但是引用作為返回值的時(shí)候需要注意,
絕不能返回 local 對象的reference ,這時(shí)必須要以傳值的形式作為返回值。
比如函數(shù) returnTestOne().在其他函數(shù)調(diào)用它的時(shí)候, 會產(chǎn)生不可預(yù)知的錯(cuò)誤! 因?yàn)?s 在stack 內(nèi)存, 函數(shù)結(jié)束時(shí)已回收, 而調(diào)用此函數(shù)的返回值,用的還是? s 這塊內(nèi)存,會非常危險(xiǎn)。
returnTestTwo() 雖然用指針解決了這個(gè)問題,但是在函數(shù)中開辟的Heap內(nèi)存,在外界非常容易忘記delete, 所以這樣的寫法會非常容易造成 memory leak .
所以,在需要值傳遞( pass by value )的時(shí)候 ,就老老實(shí)實(shí)寫成 returnTestThree() 這種函數(shù).
以上這些內(nèi)容就是復(fù)述一遍 effective c++ 里面的一些知識點(diǎn),
道理雖然不難,但是還是自己上機(jī)寫個(gè) console 程序看看? log 印象更深刻一些。
并且平時(shí)也應(yīng)該注意和運(yùn)用書上所說的知識點(diǎn)才行。
總結(jié)
以上是生活随笔為你收集整理的[C++学习] effective c++ 笔记 pass by value ,pass by reference的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Databricks 第5篇:Datab
- 下一篇: C++中值传递(pass-by-valu