C++中对象数组初始化时为什么调用析构函数而普通对象只在使用结束时调用。
解决时间 2021-02-19 11:55
- 提问者网友:鐵馬踏冰河
- 2021-02-18 11:17
#include
#include
#include
using namespace std;
class Student
{
public:
Student(int,string,char); //定义构造函数
~Student(); //定义析构函数
void display(); //定义成员函数
private:
int num;
string name;
char sex;
};
Student::Student(int n,string nam,char s)
{
num = n;
name = nam;
sex = s;
cout<<"调用构造函数。";
}
Student::~Student()
{
cout< cout<<"调用析构函数:"<}
void Student::display()
{
cout<<"num:"< cout<<"name:"< cout<<"sex:"<}
int main()
{
Student stu[3] =
{
Student(10010,"wg",'m'),
Student(10011,"zf",'m'),
Student(10012,"xl",'f')
};//定义对象数组,在初始化时会调用析构函数
Student stud(10013,"gh",'f'); //定义普通对象,在初始化时不会调用析构函数
cout< cout<<"学生stu[0]的信息是:"< stu[0].display();
cout<<"学生stu[1]的信息是:"< stu[1].display();
cout<<"学生stu[2]的信息是:"< stu[2].display();
cout<<"学生stud的信息是:"< stud.display();
return 0;
}
最佳答案
- 五星知识达人网友:持酒劝斜阳
- 2021-02-18 12:17
这涉及到c++中无名对象的问题。无名对象也叫临时对象。
Student(10010,"wg",'m'),
Student(10011,"zf",'m'),
Student(10012,"xl",'f')
你这几句其实是实例化了3个类对象,只是没有对象名。故系统会临时分配对象地址,待赋值结束后,自动调用析构函数将这几个无名对象的内存空间析构掉。
全部回答
- 1楼网友:洒脱疯子
- 2021-02-18 13:21
monthday[13]你这里 不明显就是monthday[13] = 后面那个值吗?
数组只有前面声明定义一起的时候才能 像你那么定义
monthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
这句话等于是给monthday第13号赋值~ 当然是错的~
在构造函数里
这样只能一个一个定义了~
我要举报
大家都在看
推荐资讯