之前写代码写了一个非常愚蠢的错误,在一个构造函数里面显示的调用了另外一个构造函数。
可以先简单的上个例子:
#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() 会生成一个匿名对象,这个匿名对象和原本的对象的之间没有半毛钱 的关系,是两个对象。所以原本里面的数值并不会被初始化。
博客讨论了C++编程中一个常见的错误:在构造函数内部直接调用另一个构造函数。这会导致匿名对象的创建,与原本的对象无关,从而可能阻止正确初始化。作者通过示例代码解释了这种做法的后果,并提醒开发者注意避免此类错误。

1608

被折叠的 条评论
为什么被折叠?



