构造函数问题

[复制链接]
1674|3
 楼主| yybj 发表于 2012-6-16 18:25 | 显示全部楼层 |阅读模式
class CLS
{
public:
int m_i;
CLS( int i )
{
this->m_i=i;
}
CLS()
{
CLS(0);
}
};

void main()
{
CLS obj;
cout << obj.m_i << endl;
}

解析一下为什么不能输出0呢?我单步调式过,this->m_i=i;是能执行的,m_i也能赋值为0,但是CLS( int i ) 一返回的时候,m_i的值就改变了,这是为什么呢?
dfsa 发表于 2012-6-16 18:51 | 显示全部楼层
上面代码中,CLS obj;这里已经为obj分配了内存,然后调用默认构造函数,但是默认构造函数还未执行完,却调用了另一个构造函数,这样相当于产生了一个匿名的临时CLS对象,它调用CLS(int)构造函数,将这个匿名临时对象自己的数据成员m_i初始化为0;但是obj的数据成员并没有得到初始化。于是obj的m_i是未初始化的,因此其值也是不确定的。
无冕之王 发表于 2012-6-16 19:01 | 显示全部楼层
一般来说两次调用构造函数就会生成两个对象,不管他们是临时的或者匿名的,他们所占用的内存是不同的。因此尽管你单步调式看到m_i似乎已经被赋给0了,但那只是其中一个对象中的m_i,而不是代码中的obj这个对象。
pkat 发表于 2012-6-16 19:15 | 显示全部楼层
不会调用默认函数吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部