先做个小测验,不要编译运行,请问下面的代码输出什么?
[cpp]
#include <string>
using std::string;
class Factory {
public:
Factory() {
Factory("scheduler.conf");
printf("Factory()\n");
}
Factory(const string &str) {
printf("Factory(string)\n");
}
~Factory() {
printf("Deconstruct\n");
}
};
int main()
{
Factory factory;
}
[/cpp]
答案公布:
[cpp]
Factory(string)
Deconstruct
Factory()
Deconstruct
[/cpp]
如果你问:怎么可能有两个析构!!那么我估计你是学过Java的,并且把Java和C++的构造、析构机制搞混了。
在Java中,构造函数的第一行调用其他构造函数是允许的,表示调用其他构造函数构造对象。
但是标准C++中(注意是ISO 99,VC忽略)这是不允许的,
[cpp]
Factory()
{
Factory("an other Constructer()");
}
[/cpp]
这种情况只是在Factory()中使用Factory(string)创建了一个临时Factory对象,当}之后,这个临时对象就消失了。
好了……我觉得我的C++好菜……这么一个问题搞了我3个小时……哎