首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于C++无参构造函数调用有参构造函数的疑点!

2013-08-10 
关于C++无参构造函数调用有参构造函数的疑问!!!!!#include iostream.hclass A{public:A(){A(0)}A(int i

关于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);
}


这条语句的功能是:当你调用声明对象的构造函数时,不会因为调用两次构造而分配新的内存生成新对象,它会在原来内存的基础上进行操作。

热点排行