C++的对象数组:
顾名思义,即是存储对象的数组。比如有一个对象student,实例化为对象数组有如下两种方式:
student stu[3]; //第一种方法,在栈空间中占用内存
student *stu = new student[3];//第二种方法,在堆空间中分配空间
对象数组调用构造函数:
class student //定义一个student类,只有个构造函数当示例用
{
public:
student(string name, int age)
{
stu_name = name;
stu_age = age;
}
private:
string stu_name;
int stu_age;
};
int main()
{
student stu1[3] = student("小明",12); //调用构造函数把三个对象的stu_name和stu_age都初始化为"小明"和12
student stu2[3] = {student("小明",12),student("小王",13),student("小李",14)};//把三个对象的stu_name和stu_age分别初始化为"小明",12和“小王”,13和"小李",14
student *stu3[3]; //定义一个指针数组对象
for(int i = 0; i < 3; i++) //循环依次实例化
{
stu3[i] = new student("小明",12); //调用构造函数
}
}
调用析构函数:
在对象stu1和stu2这两个对象数组中是不需要释放内存的,栈空间的内存系统自动释放,所以在析构函数中并不需要写什么;但是在堆空间中,由于使用了new操作符来申请内存,所以需要程序员手动释放。紧接着上面的代码,如下:
for(int i = 0; i < 3; i++) //由于创建的是指针数组,所以需要循环释放内存
{
delete stu3[i];
}
注意:
如果构造函数里面没有传任何参数,那么使用new操作符可以进行如下不同于上面的实例化对象和释放内存操作
student *stu4 = new student[3]; //实例化对象数组
delete []stu4; //释放内存