根据我的阅读,“首次使用构造”使用方法在第一次调用方法时创建静态变量,然后在后续方法调用中返回相同的变量。我在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次。这应该发生吗?我认为只应在程序结束时调用析构函数。 我怀疑我可能以某种方式弄乱了我的电脑,但我可能在我的代码中犯了一个简单的错误......有什么想法吗?
答案 0 :(得分:1)
请说明您对代码的期望。
由于它是一个静态变量,它将在函数调用之间共享,这就是为什么你看到它的构造函数只调用一次。你正在返回它的副本,这就是为什么你只能在构造函数之后看到析构函数。
添加一个复制构造函数,你会注意到它:
testClass(const testClass& in) { *this = in; printf("copy constructor\n");
通常编译器应该生成复制构造函数,如果你没有实现它,虽然它不会打印自定义消息但不应该令人惊讶。