析构函数不在控制台上打印行

Destructor doesn't print line on console

本文关键字:打印 控制台 析构函数      更新时间:2023-10-16

我正在使用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

我在学生构造函数中

我想你在这一点上得到输出,即在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;
}

您的代码看起来不错,cout ist 一个缓冲的控制台输出流对象实例:您确定您的析构函数消息不只是缓冲在最后一个右大括号和 cout 刷新之后写入吗?