美文网首页
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++创建类对象方法和动态对象数组

    最近在学C++,在内存管理这里遇到几个点,记录一下加深记忆。 创建类对象的方法 C++中有两种创建对象的方法,一种...

  • 慕课网-C++远征之封装篇(下)-学习笔记

    C++远征之封装篇(下) c++封装概述 类 & 对象 对象+数据成员 = 对象成员 对象 + 数组 = 对象数组...

  • 8、面向对象

    分析面向对象 先分析类,分析静态的属性和动态的方法 创建对象:类名 对象名=new 类名(); 为对象的属性赋值:...

  • 反射

    java的动态机制,用于在运行期间检查对象的类型,检查对象的类结构,属性,方法,还可以动态加载类,动态创建对象,动...

  • [C++之旅] 14 对象成员与对象数组

    [C++之旅] 14 对象成员与对象数组 对象数组 使用方式 从栈中实例化对象数组类名 对象名[对象个数];对象名...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • Category实现原理

    依赖runtime 动态的将分类的方法和类方法合并到类对象和元类对象的方法列表中 (对实例对象 类对象 元类对...

  • ES6对数组的扩展

    Array.from() Array.from方法用于将“类数组”对象和“可迭代”对象转为真正的数组。 类数组对象...

  • Python学习笔记5

    面向对象 类和对象的创建 属相相关 方法相关 元类 内置的特殊属性 内置的特殊方法 面向对象 类和对象的创建 类 ...

  • Python面向对象

    创建类和对象 class是关键字,表示类 创建对象,类名称后加括号即可 面向对象:【创建对象】【通过对象执行方法】...

网友评论

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

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