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

最近在學C++,在內存管理這裏遇到幾個點,記錄一下加深記憶。ios

建立類對象的方法

C++中有兩種建立對象的方法,一種是直接聲明,另外一種則是使用new關鍵字,雖然做用相同,可是它們底層的存儲方式卻徹底不一樣。在此以前,咱們先了解一下C++程序的存儲形式。
C++程序的內存格局一般分爲四個區:
1. data area(全局數據區)
2. code area (代碼區)
3. stack area (棧區)
4. heap area (堆區)c++

其中,堆區就是「自由存儲區」,咱們的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");
}

複製代碼

這種方法建立時,會在棧區開闢內存空間,這時內存管理由C++本身處理。可是,咱們的棧區是有限的,並且通常空間不大,因此new就派上用場了!
通常來講,堆區的空間是足夠大的,而在其中申請的內存空間,要由程序員本身管理。也就是說,當咱們new一個變量以後,若是以後不用了,就必須手動delete,不然,就會形成內存泄漏。數組

用new方法建立對象的方法以下:ui

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

複製代碼

建立動態對象數組

C++中,建立對象數組很簡單,方法以下:this

#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];
}

複製代碼

可是,若是類沒有默認構造方法,上面的方法就會報錯,面對沒有默認構造方法的類的對象數組的構造方法以下:spa

#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");
    }
}

複製代碼
相關文章
相關標籤/搜索