析构函数体内的函数调用不起作用

时间:2015-04-26 18:14:17

标签: c++

有一个函数可以打印一些东西,当需要销毁对象(必须是全局对象)时,我需要在main和析构函数中显式调用此函数。但是,析构函数的调用不会显示在文件中。

#include <iostream>
#include <fstream>

using namespace std;

class A {

public:
    friend void func(A&);
    ~A() {
        func(*this);
    }

};

A a;
ofstream out;

int main() {
    out.open("file.txt");
    func(a);
    cin.get();
    return 0;
}

void func(A& a) {
    out << "\nHello!!!\n";
}

我只看到一个&#34;你好!!!&#34;在文件中我想要两个。我也没有关闭ostream对象。理想情况下,我想在析构函数中调用函数后关闭它。我该怎么办?

1 个答案:

答案 0 :(得分:1)

同一翻译单元中的静态对象按其定义顺序构建,并按相反顺序进行破坏,如here所述

因此,你的&#34; out&#34;在调用析构函数并尝试写入之前,对象被破坏(因此关闭)。

切换声明顺序可以解决问题,但可能不是一个很好的解决方案,你最好完全避开静态的全局对象。 (特别是尽量避免依赖于破坏的顺序)。