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