析构函数不会在控制台

时间:2017-11-19 08:39:45

标签: c++ inheritance destructor

我正在使用visual studio 2013并打印一些cout命令来测试,当我调试我的代码时,控件进入两个类的析构函数,但它不在控制台上打印cout语句。

#include <iostream>  
using namespace std;

class Uni
{
 public:
 ~Uni()
 {
    cout << "I am in Uni Destructor" << endl;
 }

 Uni()
 {
    cout << "I am in Uni Constructor" << endl;
 }

};


class Student: public Uni
{
 public:

 Student()
 {
    cout << "I am in Student Constructor" << endl;
 }
 ~Student()
 {
    cout << "I am in Student Destructor" << endl;
 }



};

int main()
{
  Student s;
  system("pause");
  return 0;
}

输出:

我在Uni Constructor

我在学生构造函数

2 个答案:

答案 0 :(得分:1)

我想你在这一点上得到了输出,即在pause之后。

int main()
{
  Student s;
  system("pause");

  // here; but s is not destroyed yet
  return 0;
}

但此时s仍然没有被摧毁。当它离开声明的范围时,即当离开函数main时,它将被销毁。

您可以将s放入进一步的测试范围。

int main()
{
  {
    Student s;
  } // s will be destroyed here

  system("pause");
  return 0;
}

答案 1 :(得分:0)

你的代码看起来很好,cout是一个缓冲的控制台输出流对象实例:你确定你的析构函数消息不仅仅是在最后一个结束括号和cout冲洗之后写入的吗?