永发信息网

C++中对象数组初始化时为什么调用析构函数而普通对象只在使用结束时调用。

答案:2  悬赏:10  手机版
解决时间 2021-02-19 11:55
#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;
}
最佳答案
这涉及到c++中无名对象的问题。无名对象也叫临时对象。
Student(10010,"wg",'m'),
Student(10011,"zf",'m'),
Student(10012,"xl",'f')
你这几句其实是实例化了3个类对象,只是没有对象名。故系统会临时分配对象地址,待赋值结束后,自动调用析构函数将这几个无名对象的内存空间析构掉。
全部回答
monthday[13]你这里 不明显就是monthday[13] = 后面那个值吗? 数组只有前面声明定义一起的时候才能 像你那么定义 monthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; 这句话等于是给monthday第13号赋值~ 当然是错的~ 在构造函数里 这样只能一个一个定义了~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求翻译,德国HTT energy GmbH的加热冷却装置Th
av界70年以前的明星有那些
怪物猎人OL怎么杀金狮子 击杀金狮子要注意什
寂寞开无主中的无主什么意思
老刘渡口地址在什么地方,想过去办事
【烫金工艺】什么是烫金?烫金工艺参数?
绝味鸭脖文化路店在哪里啊,我有事要去这个地
烟台大学设有哪些专科
梦见老公要跟前女友在一起,跟我离婚!
有什么好的BPM系统推荐
【同步卫星】同步卫星距离地面的高度是多少?
龙贵村综合场这个地址在什么地方,我要处理点
上联赏花赏月赏花灯下联是什么
双眼皮一个半月扎出线头后眼角修改疼嘛
想带小孩一起泡温泉,大家有什么好推荐呢,限
推荐资讯
【蘑菇街货到后,如何付款在蘑菇街购物后,拿到
关于下图的正确叙述是①该图表示北半球的气旋
420克等于多少千克?
临汾市哪个地方有打字复印的
外径是9.5mm内径大概是8.4mm的是什么螺纹?
盘锦晶泽米业有限公司工会委员会在哪里啊,我
今天看到母亲洗澡了
男人部落潮人店这个地址在什么地方,我要处理
有什么歌的歌词里面有成都人宽窄巷子我爱我的
档案应该放在手里还是人才,和日后保三险有没
如何制服摩羯座男人
骨中有机物的成分主要是DA、脂肪 B、无机盐 C
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?