关于C++无参构造函数调用有参构造函数的疑问!!!!!
#include <iostream.h>
class A
{
public:
A()
{
A(0);
}
A(int i)
{
m_data = i;
}
void Print()
{
cout<<m_data<<endl;
}
protected:
private:
int m_data;
};
int main()
{
//A a(0);
A a;
a.Print();
}
为什么打印出来不是0呢? 我调试的时候代码走到初始化的地方了????小白求教!
[解决办法]
这个操作由于调用了两次构造函数,所以生成了两个对象。进行赋值的是隐藏的对象成员,而不是你声明的成员,隐藏的成员在构造完毕之后就被析构了。
尽量不要用构造套用构造的形式,如果一定要用,需要用到Placement New。代码如下:
A()
{
new (this)A(0);
}