之前写代码写了一个非常愚蠢的错误,在一个构造函数里面显示的调用了另外一个构造函数。
可以先简单的上个例子:
#include <iostream>
class CTest
{
public:
CTest()
{
m_a = 1;
}
CTest(int b)
{
m_b = b;
CTest();
}
~CTest()
{}
void show
{
std::cout << m_a << std::endl;
std::cout << m_b << std::endl;
}
private:
int m_a;
int m_b;
};
void main()
{
CTest myTest(2);
myTest.show();
}
类似于这种,在CTest(int) 里面显示的调用了默认的构造函数CTest(),这样会有什么后果勒?
CTest(int b)
{
m_b = b;
CTest();
}
如果是这样的显示的调用,其实在CTest(int b) 中的CTest() 会生成一个匿名对象,这个匿名对象和原本的对象的之间没有半毛钱 的关系,是两个对象。所以原本里面的数值并不会被初始化。