用new創建類對象與不new區別


在C#和Java中,在使用對象的時候一般都是通過New,我們知道通過new關鍵字實際上是在heap(堆中)開辟了一塊內存,而等號右邊的這個對象實際上就是一個內存地址,不信的話,可以打印出來看看。其實並不僅僅這么簡單。堆上分配的是不定大小的對象,大小不固定,而基本數據類型(int,short)什么的都在棧上,棧上對象的大小是固定的,堆上對象的引用也在棧上,如果堆上的對象在棧(stack)上沒有了引用,它就被GC回收了。在學OO開發的時候,老師一般都會苦口婆心的讓我們記住這些,這些也算是OO開發的基礎吧。

在C++的時候,跟這個不太一樣,我們知道C++不是完全的面向對象的,在C++中,對象和對象指針都會用到,但是兩者區別蠻大的。

C++中,使用new創建類對象需要指針接收,也就是對象指針,這種對象,當使用new的時候會在heap中開辟內存空間,然后將內存地址返回給對象指針變量,new了之后的對象,在不用的時候,一定要delete,也就是手動釋放,否則在程序退出的時候會有內存泄露。

  • new創建類對象需要指針接收,一處初始化,多處使用
  • new創建類對象使用完需delete銷毀
  • new創建對象直接使用堆空間,而局部不用new定義類對象則使用棧空間
  • new對象指針用途廣泛,比如作為函數返回值、函數參數等

而如果直接聲明類的變量,如:

CTest mTest;

此種創建方式,對象是被創建在棧上的,使用完后不需要手動釋放,該類析構函數會自動執行。

總結:

 

  • new創建類對象需要指針接收,一處初始化,多處使用
  • new創建類對象使用完需delete銷毀
  • new創建對象直接使用堆空間,而局部不用new定義類對象則使用棧空間
  • new對象指針用途廣泛,比如作為函數返回值、函數參數等
  • 頻繁調用場合並不適合new,就像new申請和釋放內存一樣

 

最后推薦一篇博客:http://www.cnblogs.com/hellope/archive/2011/08/03/2126371.html,博客中用圖的方式說明了局部變量使用new和不使用new的區別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM