c++知識點(二)

1.malloc/free與new/delete的區別

  • 相同點:malloc/free與new/delete都可以用於申請動態內存和釋放內存,申請的空間都在堆上分配
  • 不同點:

        (1)malloc/free是c++/c的標準庫函數,new/delete是c++的運算符;

        (2)使用malloc/free,無法強制要求其做自定義類型對象構造和析構工作;而new/delete能自動執行構造函數和析構函數;

        (3)malloc分配內存空間前需要計算分配內存大小,而new能自動分配內存空間;

        (4)malloc是底層函數,其函數返回值類型爲void *;而new運算符調用無參構造函數,故返回值爲對應對象的指針;

        (5)malloc函數類型不是安全的,編譯器不對其進行類型轉換、類型安全的相關檢查。而new類型是安全的,因爲它內置了sizeof、類型轉換和類型安全檢查功能,且在創建對象時,就完成了初始化工作,一般初始化調用無參構造函數;

         (6)operator new對應於malloc,且operator new可以重載,可以自定義內存分配策略,甚至不做內存分配,甚至分配到非內存設備上;但malloc不能。

2.this指針

https://blog.csdn.net/better1914/article/details/62043410

  • 什麼是this指針:就是指向對象自身數據的指針,裏面存儲的是對象本身的地址,通過該地址可以訪問內部的成員函數和成員變量。
  • this只能在非靜態成員函數中使用。全局函數,靜態函數都不能使用this。實際上,成員函數默認第一個參數爲T* const register this。
  • 爲什麼this指針不能再靜態函數中使用?靜態成員函數並不是針對某個類的實例對象,而是屬於整個類的,爲所有的對象實例所共有。他在作用域的範圍內是全局的,獨立於類的對象之外的。他只對類內部的靜態成員變量做操作。當實例化一個類的對象時候,裏面不存在靜態成員的。this指針是相當於一個類的實例的指針,this是用來操作對象實例的內容的,既然靜態成員函數和變量都是獨立於類的實例對象之外的,他就不能用this指針,也不能操作非靜態成員。
  • 每個成員函數都有一個this指針,this指針指向調用對象。即,某個對象正在調用成員函數那麼this指針就指向哪個對象。this指針並不是對象本身的一部分,不影響sizeof的結果(已證明)。
  • this指針是類成員函數的第一個默認隱含參數,編譯器自動維護傳遞,類編寫者不能顯式傳遞(可用C語言模擬實現)
  • this指針的使用:一種情況是,在類的非靜態成員函數中返回類的對象本身的時候,直接使用return *this;另外一種是當參數與成員變量名相同時,this->n=n(不能寫成n=n).

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章