【发布时间】:2011-05-11 11:21:20
【问题描述】:
我是一名新手程序员,正在为学校编写一些代码。执行以下代码时,会输出 BAD 字样。我不明白为什么WriteLettersObj对象终止时析构函数中的字母C没有输出。
// Lab 1
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class WriteLetters {
public:
WriteLetters();
void writeOneLetter();
~WriteLetters();
} WriteLettersObj;
WriteLetters::WriteLetters() {
cout << "B";
}
void WriteLetters::writeOneLetter() {
cout << "A";
}
WriteLetters::~WriteLetters() {
cout << "C" << endl;
}
int main() {
WriteLettersObj.writeOneLetter();
cout << "D";
getch();
return 0;
}
【问题讨论】:
-
如果你删除 getch() 会打印出 BADC 吗?我在 Unix 上运行 g++ 删除了 getch() 和 stdafx/conio.h 标头,它打印出 BADC。
-
我在没有getch()的情况下试过了,确实如此
-
即使
getch()也可以,唯一的问题是他的屏幕在他看到输出之前就消失了。看看我下面的答案。 -
您确定结果吗?
std::cout不会被破坏,所以C肯定应该被打印出来。 (你为什么打电话给getch()?这似乎没有任何意义。) -
@James McNellis - 在 Visual C++ 2010 中,输出窗口关闭,我们实际上应该在最后的
return语句处设置断点。一旦我们在这个断点之后继续,输出窗口 get 关闭并且析构函数调用cout语句不可见。我的意思是说,尽管实际调用了析构函数,但输出窗口会立即关闭。因此,OP 可能实际上认为根本不调用析构函数。考虑到这一点,我引用了我的答案。让我知道我是否错了。 @AI T - ideone.com/KEbu3
标签: c++