C ++:简单的构造 - 首次使用不起作用

时间:2013-07-27 00:20:13

标签: static constructor destructor

根据我的阅读,“首次使用构造”使用方法在第一次调用方法时创建静态变量,然后在后续方法调用中返回相同的变量。我在eclipse中制作了这个简单的C ++程序:

#include "stdio.h";

class testClass {
public:
    testClass() {
        printf("constructed\n");
    }

    ~testClass() {
        printf("destructed\n");
    }
};

testClass test() {
    static testClass t;
    return t;
}

int main() {
    test();
    test();
    test();
    printf("tests done!\n");
}

这是我的结果:

constructed
destructed
destructed
destructed
tests done!
destructed

似乎main创建了一个实例,然后将其销毁4次。这应该发生吗?我认为只应在程序结束时调用析构函数。 我怀疑我可能以某种方式弄乱了我的电脑,但我可能在我的代码中犯了一个简单的错误......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  1. 请说明您对代码的期望。

  2. 由于它是一个静态变量,它将在函数调用之间共享,这就是为什么你看到它的构造函数只调用一次。你正在返回它的副本,这就是为什么你只能在构造函数之后看到析构函数。

  3. 添加一个复制构造函数,你会注意到它:

    testClass(const testClass& in) { *this = in; printf("copy constructor\n");
    

    通常编译器应该生成复制构造函数,如果你没有实现它,虽然它不会打印自定义消息但不应该令人惊讶。