Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有。看一下这段代码:


class A { public:     A() { printf("A() \n"); }     A(int d) { printf("A(int) \n"); A(); }  // 不能这样调用构造函数!会生成另一个匿名对象     ~A() { printf(" ~A \n"); }      void ddd() { printf(" ddd \n"); }  };  int main(int argc, char* argv[]) {     A aaa(9);     aaa.ddd();      getchar();     return 0; }


输出结果是:

A(int)

A()

~A

ddd

但是如果改成

A(int d) { printf("A(int) \n"); }

输出结果是:

A(int)

ddd

充分证明这中间有生成和销毁过一个匿名对象!并且我目前不知道有没有官方解决方案,如果要定义init()函数,那还是算了吧。