首页 > 开发 > C++ > 正文

请教默认构造函数调用自定义构造函数的问题

2017-09-11 21:35:12  来源: 网友分享

先看一段简单的代码吧:

#include <iostream>using namespace std;struct CLS{  int m_i;  CLS( int i ) : m_i(i) {}  CLS()  {    CLS(2);  }};int main(int argc, char *argv[]){  CLS obj1;  cout << obj1.m_i << endl;  CLS *obj2 = new CLS();  cout << obj2->m_i << endl;  delete obj2;  return 0;}

上面代码的输出结果是:

-12203120740
  1. 显然,我预期的输出结果是2,但不管是在栈上构造对象还是在堆上构造对象,结果都不是我们想要的。
    这是什么原因呢?
  2. CLS obj1; 为什么不能写成 CLS obj1();
  3. 为什么自动分配的对象和new的对象会输出不同的结果?

解决方案

1、你在构造函数中调用了另一个构造函数,实际上只是创建了一个匿名的临时变量!而不是像你想象中的那样!
2、如果写成CLS obj1();那就是一个函数声明!
3、你在构造函数中没有显式对成员变量进行初始化或者赋值,所以m_i的结果是未定义的!