C++創建類對象方法和動態對象數組


創建類對象的方法

C++中有兩種創建對象的方法,一種是直接聲明,另一種則是使用new關鍵字,雖然作用相同,但是它們底層的存儲方式卻完全不同。在此之前,我們先了解一下C++程序的存儲形式。
C++程序的內存格局通常分為四個區:
1. data area(全局數據區)
2. code area (代碼區)
3. stack area (棧區)
4. heap area (堆區)

其中,堆區就是“自由存儲區”,我們的new就是在堆區中申請內存的。回歸正題,C++的第一種類對象的創建方法,直接聲明:

#include <iostream> using namespace std; class Demo{ public: Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ Demo object1("object1"); } 
 
image

這種方法創建時,會在棧區開辟內存空間,這時內存管理由C++自己處理。但是,我們的棧區是有限的,而且一般空間不大,所以new就派上用場了!
一般來說,堆區的空間是足夠大的,而在其中申請的內存空間,要由程序員自己管理。也就是說,當我們new一個變量之后,如果之后不用了,就必須手動delete,否則,就會造成內存泄漏。

用new方法創建對象的方法如下:

int main(){ //Demo object1("object1"); Demo *object2 = new Demo("object2"); delete object2; } 
 
image

創建動態對象數組

C++中,創建對象數組很簡單,方法如下:

#include <iostream> using namespace std; class Demo{ public: Demo(){ cout << "A Demo..." << endl; } Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ Demo objs[10]; } 

但是,如果類沒有默認構造方法,上面的方法就會報錯,面對沒有默認構造方法的類的對象數組的構造方法如下:

#include <iostream> using namespace std; class Demo{ public: /* Demo(){ cout << "A Demo..." << endl; } */ Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ // Demo objs[10]; // error; Demo *objs = new Demo[10]; Demo **objs = new Demo *[10]; for (int i = 0; i < 10; i++) { objs[i] = new Demo("object"); } } 


作者:FantasTowns
鏈接:https://www.jianshu.com/p/fe3559eee136
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

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



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