-1

根据我的阅读,“首次使用时构造”使用方法在第一次调用该方法时创建一个静态变量,然后在后续方法调用中返回相同的变量。我在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 次。这应该发生吗?我认为析构函数应该只在程序结束时调用。我怀疑我可能以某种方式搞砸了我的计算机,但我可能只是在我的代码中犯了一个简单的错误......有什么想法吗?

4

1 回答 1

1
  1. 请指定您对代码的期望。

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

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

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

通常,如果您没有实现,编译器应该生成复制构造函数,尽管它不会打印自定义消息,但这不足为奇。

于 2013-07-27T01:23:52.663 回答