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

标签 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

我在Student Constructor中

最佳答案

我想你此时会得到输出,即在 pause 之后。

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

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

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

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

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

  system("pause");
  return 0;
}

关于c++ - 析构函数不在控制台上打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47375044/

相关文章:

c++ - Boost ASIO 用于 OS X 上的高波特率串口

java - 在将子类中的值发送到私有(private)父类(super class)变量之前检查它

ios - 如何在我正在子类化的类中返回 Swift 中的泛型类型

C++ 类 : Pass by reference

c++ - Raspberry 上的 Libtorch 无法加载 pt 文件但在 ubuntu 上工作

c# - C#中的继承误区

c++ - lcov 报告未执行静态成员变量析构函数中的行

C++11 析构函数 = 删除

c++ - 为什么不为函数返回的对象调用析构函数?

c++ - 通过 gcc-6 在 OSX Sierra 上安装时,保持 "FATAL:/opt/local/bin/../libexec/as/x86_64/as: I don' t 理解 'm' 标志!”错误