簡體   English   中英

C ++析構函數異常

[英]C++ Destructor Exception

我是一個新手程序員,正在為學校編寫一些代碼。 當執行以下代碼時,將輸出單詞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;
}

您正在將iostream與非ANSI conio.h混合。

進行以下更改:

// getch();
cin.get();

嘿,請問,C出現了。 至少在OS X上可以。 還有Ubuntu。

您的程序一直處於運行狀態,直到您通過return 0指令退出main()為止。 由於WriteLettersObj是全局變量,因此它將在main()開始之前進行構造,並在main()完成之后而不是在getch()之后進行銷毀。

要查看輸出結果,請將getch()放在析構函數的末尾。

我試過在Linux和Mac上運行代碼而沒有 getch,它運行得很好。 @iammilind是正確的,您應該在析構函數中移動getch。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM