[讨论]构造函数内调用构造函数的合法性?
看下面一段代码:class CLS{
public:
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
int m_i;
};
CLS obj;
cout << obj.m_i << endl; //输出结果是什么?
这是一个面试题,测试输出是不定的,有人说在构造函数内调用构造函数是非法的,但实际上编译器是并没有报错或警告。
今天在看《Effective c++》Third Edition 的时候,在 Item14:Think carefully about copy behavior in resource-managing classes.有这样的代码:
void lock(){Mutex *pm}
void unlock (){ Mutex *pm }
class Lock
{
public:
explicit Lock(Mutex *pm):MutexPtr(pm){}
~Lock (){ unlock(mutexPtr);}
private:
Mutex *mutexPtr;
};
《Effective c++》也算是本比较权威的书。大师们应该不会范低级的错误吧。那么,构造函数内调用构造函数是不是非法的呢?为什么?大家讨论下。
[此贴子已经被作者于2007-9-11 15:19:35编辑过]