C ++析构函数异常

时间:2011-05-11 03:08:02

标签: c++

我是一名新手程序员,负责学校的一些代码。执行以下代码时,输​​出单词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;
}

3 个答案:

答案 0 :(得分:2)

您正在将iostream与非ANSI conio.h混合使用。

进行此更改:

// getch();
cin.get();
哎呀,C出现了。至少在OS X上它确实如此。和Ubuntu。

答案 1 :(得分:1)

在您使用main()指令退出return 0之前,您的计划已有效。由于WriteLettersObj是一个全局变量,它将在main()开始之前构建,并在main()完成之后而不是在getch()之后被破坏。

要查看输出是否已打印,请将getch()放在析构函数的末尾。

答案 2 :(得分:0)

我尝试在linux和Mac上运行你的代码没有 getch,它运行得很好。 @iammilind是对的,你应该在析构函数中移动getch。