CPP学习之——在堆中创建对象(8.11)

一 概述

我们既然可以在堆中保存变量,那么也就可以保存对象,我们可以将对象保存在堆中,然后通过指针来访问它。

二 代码及结果输出

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
class Human
{
private:
int i;
public:
Human()
{
cout << "在构造函数执行中。。" << endl;
i = 999;
}
};
int main()
{
Human *p=new Human;
return 0;
}

2.2 输出结果

1
在构造函数执行中。。

2.3 说明

  • Human *p:该行定义了一个Human类的指针p
  • p=new Human;该行使用new 创建一块内存空间,同时又调用了Human类的默认构造函数来构造一个对象,它所占用的内存大小根据Human类对象的成员变量来决定,假如该类有两个int型成员变量,那么该对象占用为2乘以4等于8个字节
  • 构造函数一般都是在创建对象时被自动调用,它的作用就是初始化该对象的成员数据。本行的右半部分创建一个对象完毕后,跟着将该对象的内存地址赋给左边的指针变量p
  • 这两行语句也可以合并为一句:Human *p=new Human;在定义一个Human类指针p的同时将它的值初始化为新建Human类对象的内存地址

2.4 过程

  • 使用new Human在堆中创建一个类Human的对象
  • 由于创建对象时会自动调用类的构造函数来初始化对象的成员数据,这里调用构造函数,调用的结果是将i初始化为999
  • new Human的右半部分在堆中创建对象完毕后,就会返回该对象的地址,这个地址赋给了左边的指针变量p
  • 在堆中创建的对象时匿名的,它没有名字,我们无法直接访问它,只能通过指针来访问它,指针记录了堆中对象的地址,所以只有指针才能找到该对象