| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 842 人关注过本帖
标题:请问为何此程序会出现两次析构函数调用~谢谢大家!
取消只看楼主 加入收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
收藏
已结贴  问题点数:20 回复次数:4 
请问为何此程序会出现两次析构函数调用~谢谢大家!
#include<iostream>
#include<string>
using namespace std;

class Student
{
public:
    Student::Student(string a,int b,float c);
    Student();
    ~Student();
    void show();

private:
    string name;
    int num;
    float grade;
};

Student::Student()
{
    cout<<num<<"_默认构造函数"<<endl;
}

Student::~Student()
{
    cout<<num<<"_析构函数"<<endl;
}

void Student::show()
{
    cout<<"学生信息为:"<<endl;
    cout<<name<<"_"<<num<<"_"<<grade<<endl;
}

Student::Student(string a,int b,float c):name(a),num(b),grade(c){ cout<<num<<"_带参数的构造函数!"<<endl; };

int main()
{
//    Student stu[3]={Student("Amos",1022,98.5),Student("Vivien",1021,95.5),Student("Leon",1023,91.5)};

//    stu[0].show();
//    stu[1].show();
//    stu[2].show();

    Student A =Student("Amos",1022,98.5);
    Student B =Student("Vivien",1021,95.5);
    Student C =Student("Leon",1023,91.5);
    A.show();
    B.show();
    C.show();

}
搜索更多相关主题的帖子: private 信息 public include 
2015-09-20 16:33
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
运行程序大家会发现。。。调用了两次析构函数~  I dont know why ~

既然还有不甘心
就还没到放弃的时候~
2015-09-20 16:39
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 3楼 诸葛欧阳
确实是三个析构函数。。。但是每个对象析构啦两次、、、、不知为何?

既然还有不甘心
就还没到放弃的时候~
2015-09-21 10:21
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 6楼 rjsp
我这个用的是VC++6.0确实太老啦~  打算换个编译工具啦  谢谢版主~

既然还有不甘心
就还没到放弃的时候~
2015-09-21 20:09
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 6楼 rjsp
//版主,你好!我按照你的建议更新了C语言编译器现在换了VS2010,两次析构的问题得到了解决但又遇到了新的问题!
#include<iostream>
#include<string>
using namespace std;

class Student
{
public:
    Student::Student(string a,int b,float c);
    Student();
    ~Student();
    void show();

private:
    string name;
    int num;
    float grade;
};

Student::Student()
{
    cout<<num<<"_默认构造函数"<<endl;
}

Student::~Student()
{
    cout<<num<<"_析构函数"<<endl;
}

void Student::show()
{
    cout<<"学生信息为:"<<endl;
    cout<<name<<"_"<<num<<"_"<<grade<<endl;
}

Student::Student(string a,int b,float c):name(a),num(b),grade(c){ cout<<num<<"_带参数的构造函数!"<<endl; };

int main()
{
  //  Student stu[3]={Student("Amos",1022,98.5),Student("Vivien",1021,95.5),Student("Leon",1023,91.5)};


   Student A =Student("Amos",1022,98.5);
   Student B =Student("Vivien",1021,95.5);
   Student C =Student("Leon",1023,91.5);
    A.show();
    B.show();
    C.show();

    getchar();

}

//以本程序为例~运行结果为
/*    1022_带参构造
      1022_析构
      1021_带参构造
      1021_析构
      1020_带参构造
      1020_析构
      输出学生信息1022
      输出学生信息1021
      输出学生信息1020
*/

但是按照我的理解:输出结果应该是:
/*    1022_带参构造
      1021_带参构造
      1020_带参构造
     
      输出学生信息1022
      输出学生信息1021
      输出学生信息1020

     1020_析构
     1021_析构
     1022_析构
*/


//希望版主能解释一下!请问是不是编译器的bug?

既然还有不甘心
就还没到放弃的时候~
2015-09-22 09:52
快速回复:请问为何此程序会出现两次析构函数调用~谢谢大家!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016141 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved