From C to Cpp


  • 從C到C++,加了哪些東西進去
    1.In-line function
    2.Reference type
    在C裡要把兩個變數對調,pointer要傳過去,裡面放的數值交換後便可。而在C++提供類似功能,但更簡潔,稱reference
    3.Parametric polymorphism through templates
    templates : 模板,函數可以是任何資料型態,只要滿足兩個函數可以處理如相加,便可以用相加來處理所有進來的data type
    4.Exception handling
    C裡不會告訴發生什麼錯誤,C++多少會想辦法說發生什麼錯誤
    5.Default function arguments
    預設值,自動決定
    6.Object-oriented programming
    定義各種class
    -->C為很有效率的語言,但變為C++希望能又有效率,又可以做更多事情,寫起來精簡易懂。 C++其實也為複雜的programming
  • Pointers and Arrays 在C中,pointer非常容易發生問題,方便,卻危險。 方便: 若要一個一百萬的記憶體空間: Array:需要連續的記憶體空間 Pointer:可以使用零散的空間方便 危險: 1.int* x, y, z 並不是指x, y, z皆為指到int的pointer,而是相當於 int *x, y, z,意思為x為指向int的pointer,而y, z為int 2.刪除沒宣告過的記憶體空間 --> segmentation fault 3.若宣告的矩陣或向量太大,則回傳不會為pointer而是錯誤 --> NULL 4.memory leak --> 會考 5.若矩陣長度為10,把值設定到11、12以上 --> out-of-bound indexing for arrays --> 避免:利用C++的STL,vec.at()可以檢查access有沒有錯誤,但因為每次都會檢查,效率會變差。
  • Memory Leak 呼叫一個new(C++ for allocate memory),而做完後要free掉,用delete,若無則會發生memory leak。
    如何避免memory leak:
    C++:new跟delete要成對出線
    C:malloc or calloc or realloc後要有free
    --> 或是在new一個pointer變數後,在delete前把pointer變數設為0或其他值,則此pointer原先指向的記憶體空間會無法delete(因為把原先的值蓋掉了,而造成不知道該如何釋放)
  • How to Tackle Memory Leak 1.良好的programming style
    Nwe/delete要成對放在同個空間(如不要new在function內而delete在外面)
    Avoid shallow copy
    2.用比較好的library
    如STL或Smart pointer
    --->若使用別人程式庫,需要去了解它、且程式會比較肥大,這是必須付出的代價
    3.Tools for debugging
    Windows:Purify
    Linux/Unix:Valgrind

results matching ""

    No results matching ""