在构造函数中调用另一个构造函数如果一不注意就会有无限递归的危险,而且构造函数的参数的不同也决定了调用的不同,所以特意总结了一下哪些形式的调用时允许的:
首先假设构造函数调用时参数都是外部的变量,而不是一个常量。
第一种,也是C++11支持的一种调用方式。在函数的初始化列表中调用另一个构造函数:
int b = 2;
class Test
{
public:
Test() : Test(b) {} //在初始化列表调用Test(int a)
Test(int a) : p(a) {}
~Test() {}
int get() { return p; }
private:
int p;
};
第二种,用this指针显示调用构造函数:
int b = 2;
class Test
{
public:
Test()
{
this->Test::Test(b); //通过this指针显式调用Test(int a)
}
Test(int a) : p(a) {}
~Test() {}
int get() { return p; }
private:
int p;
};
这种方法一定不能忘记加上作用域,不然编译无法通过!
第三种,在原始内存覆盖:
int b = 2;
class Test
{
public:
Test()
{
new (t