C++中,在构造函数中调用构造函数是一种误用,demo如下:
#include <stdio.h>
class Test
{
public:
int a;
Test()
{
printf("construct Test()...\n");
Test(88);
}
Test(int a)
{
printf("construct Test(int a)...\n");
a = 88;
}
~Test()
{
printf("destructor ~Test()...\n");
}
};
int main()
{
printf("start\n");
Test t1;
printf("end\n");
}
程序输出如下:
从输出可以看出这不是我们想要的结果
这样写是想通过无参构造函数来调用有参构造,实现默认传参的功能,但实际上在第11行相当于初始化了一个临时对象,该临时对象会被自动释放,所以是达不到初始化对象的目的,正确的方法应该是声明一个普通成员函数,而构造函数通过调用该普通成员函数实现初始化,而不能在构造函数中调用构造函数。