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

复制代码
相关文章
相关标签/搜索