今天在面试的时候,写了一个类,自己在另一个构造函数中调用了另一个构造函数,面试官说,这样不行吧,你回去查查。
后来回来一查,果然我写的有问题。下面一篇文章写的很好详细,我这里转过来,原文来自这里:http://www.cnblogs.com/chio/archive/2007/10/20/931043.html
--------从这里开始转载---------
题目如下:问下列代码的打印结果为0吗?
#include <stdlib.h> #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); } }; int main() { CLS obj; cout << obj.m_i << endl; system("PAUSE"); return 0; }打印结果是不定的,不一定为0
inline void *__cdecl operator new(size_t, void *_P) { return (_P); }可见没有分配新的内存。
struct CLS { int m_i; CLS( int i ) : m_i(i){} CLS() { new (this)CLS(0); } };
另: 若构造函数调用自身,则会出现无限递归调用,是不允许的。
--------结束转载------------
所以,在实际使用的时候,单纯的在构造函数中调用其它的构造函数,只是会产生一个临时的匿名变量。如果仅仅是为了重用代码,可以把重用的代码封装成一个新的函数。