美文网首页
C++创建类对象方法和动态对象数组

C++创建类对象方法和动态对象数组

作者: FantasTowns | 来源:发表于2019-03-17 16:02 被阅读0次

    最近在学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");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:C++创建类对象方法和动态对象数组

          本文链接:https://www.haomeiwen.com/subject/whuumqtx.html